快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法
稳定排序:假设在待排序的文件中,存在两个或两个以上的记录具有相同的关键字,在用某种排序法排序后,若这些相同关键字的元素的相对次序仍然不变,则这种排序方法是稳定的。
1. 冒泡排序: 2个相邻的数逐一比较, 保持着大的始终在后面的原则, 直到最后都比较完 理论上会比较n*(n-1)/2次
int a[] = {1,31,12,23,5,11,7,2,4,6,8,0,21,34,1321,3};int count = sizeof(a)/sizeof(1);float tmp = a[0];int loopCount = 0;while(1) { loopCount++;for(int i = 0; i < sizeof(a)/sizeof(1)-loopCount; i++) { if(a[i] <= a[i+1]) { continue; } tmp = a[i]; a[i] = a[i+1]; a[i+1] = tmp; } if (loopCount == count) break; } for(int i = 0; i < sizeof(a)/sizeof(1); i++) { printf("%d\n", a[i]); }