在编程中,排序是一个基础而重要的操作。特别是在使用 C语言稳定排序 算法时,理解“稳定性”这一概念尤为关键。本文将带你从零开始,深入浅出地学习什么是稳定排序、为什么需要它,并通过一个经典例子——冒泡排序,来实现一个完整的 C语言排序教程。
稳定排序(Stable Sort)是指:如果待排序的序列中存在多个相同关键字的元素,排序后这些元素的相对位置保持不变。
举个例子:假设有如下学生列表(按姓名和分数):
如果我们按分数排序,且使用稳定排序算法,那么排序后“张三”仍然会排在“李四”前面,因为他们在原始序列中就是这个顺序。
在 C 语言中,以下排序算法是稳定的:
而不稳定的排序包括快速排序、堆排序等。
下面是一个完整的 冒泡排序实现 示例。冒泡排序通过相邻元素比较和交换,逐步将最大(或最小)元素“冒泡”到末尾。由于它只在元素严格大于(或小于)时才交换,因此相等元素不会改变相对位置,属于稳定排序。
#include <stdio.h>void bubbleSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { // 只有当前面元素大于后面元素时才交换 // 相等时不交换,保证稳定性 if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }}int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90, 34}; int n = sizeof(arr) / sizeof(arr[0]); printf("排序前: "); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); bubbleSort(arr, n); printf("排序后: "); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); return 0;}
运行结果:
排序前: 64 34 25 12 22 11 90 34 排序后: 11 12 22 25 34 34 64 90
注意:两个 34 在排序后依然保持了它们在原数组中的相对顺序(第一个 34 来自索引 1,第二个来自索引 7),这正是 稳定排序算法 的体现。
通过本教程,你已经掌握了:
希望这篇 C语言排序教程 能帮助你打下坚实的算法基础!后续可以尝试实现插入排序或归并排序,进一步巩固对稳定排序的理解。
本文由主机测评网于2025-12-23发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251211879.html