排序算法(总结)
1. 冒泡排序
算法思想:两两比较相邻的记录的关键字,如果反序则交换顺序,直到没有反序记录为止!
算法实现:
void BubleSort(int *a, int size) { int i, j; int flag = 1;//weather need sorted for(i = 0; (i < size - 1) && flag; i++) { flag = 0; for(j = size - 1; j > i; j--) { if(a[j-1] > a[j]) { printf("compare\n"); int temp = a[j-1]; a[j-1] = a[j]; a[j] = temp; flag = 1; } } } }
2. 简单选择排序
算法思想:选择排序的第 i 次是“选择”数组中第 i 小的记录,并将该记录放到数组的第 i 个位置。其独特之处在于从未排序的序列中找到第 i 小的关键码,而很少做记录的交换,前面部分是已排序的,后面部分是未排序的。
算法实现:
void selectSort(int *a, int size) { int i, j; int minIndex; for(i = 0; i < size; i++) { minIndex = i; for(j = i+1; j < size; j++) { if(a[j] < a[minIndex]) minIndex = j; } if(i != minIndex) { int temp = a[i]; a[i] = a[minIndex]; a[minIndex] = temp; printf("compare"); } } }
3. 直接插入排序,在基本有序队列中效率很高。
算法思想:将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增加1的有序表。
算法实现:
void insertSort(int *a, int size) { int i, j, temp; for(i = 1; i < size; i++) { if(a[i] < a[i-1]) { temp = a[i]; for(j = i-1; j >= 0 && a[j] > temp; j--) { a[j+1] = a[j]; } a[j+1] = temp; } print(a, 8); } }
4. 希尔排序
算法思想:希尔排序利用了插入排序的最佳时间代价特性。希尔排序试图将待排序序列变成基本有序的,然后再用插入排序来完成最后的排序工作。
希尔排序是这样来分组并排序的:将序列分成子序列,然后分别对子序列进行排序,然后将子序列组合起来。
算法实现:
void inssort2(int *a, int n, int incr) { int i, j; for(i = incr; i < n; i += incr) { for(j = i; (j >= incr) && (a[j] < a[j-incr]); j -= incr) { int temp = a[j]; a[j] = a[j-incr]; a[j-incr] = temp; } } } void shellSort(int *a, int size) { int i, j; for(i = size/2; i>2; i/=2) { for(j=0; j<i; j++) { inssort2(&a[j], size-j, i); } print(&a[0], size); } inssort2(a, size, 1); }
5. 快速排序
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。