C语言各种排序算法
2017-07-16 10:20
183 查看
1、shell排序(希尔排序)
思想:把记录按下标的一定增量分组,对每组使用直接插入算法排序;随着增量逐渐减少,每组包含的关键字越来越多,当增量减少至1时,整个文件恰被分为一组,算法终止。
优点:直接插入排序的改进版。
(1)不需要大量的辅助空间;(2)时间复杂度与增量序列的选取有关,(希尔增量时间复杂度为O(n^2)),希尔排序的时间复杂度下限是O(n(log2n)),对于中等大小规模表现良好;(3)最坏情况和平均情况下执行效率相差不是很大,而快排在最坏情况下执行的效率会非常差。
希尔增量排序代码:
思想:把记录按下标的一定增量分组,对每组使用直接插入算法排序;随着增量逐渐减少,每组包含的关键字越来越多,当增量减少至1时,整个文件恰被分为一组,算法终止。
优点:直接插入排序的改进版。
(1)不需要大量的辅助空间;(2)时间复杂度与增量序列的选取有关,(希尔增量时间复杂度为O(n^2)),希尔排序的时间复杂度下限是O(n(log2n)),对于中等大小规模表现良好;(3)最坏情况和平均情况下执行效率相差不是很大,而快排在最坏情况下执行的效率会非常差。
希尔增量排序代码:
#include <stdio.h> void shellsort(int array[], int len) { int dist; //distance int i; int j; int temp; for (dist = len / 2; dist > 0; dist /= 2) { for (i = dist; i < len; i++) { for (j = i - dist; (j >= 0) && (array[j] > array[j+dist]); j -= dist) { temp = array[j]; array[j] = array[j+dist]; array[j+dist] = temp; } // // if (array[i-dist] > array[i]) //(X)要注意:交换后,之前的顺序要保持正确。。。。。 // { // temp = array[i-dist]; // array[i-dist] = array[i]; // array[i] = temp; } } } } int main() { int i = 0; int array[20] = {13, 5, 4, 1, 2, 9, 14, 11}; for (; i < 8; i++) { printf("%d\t", array[i]); } printf("\n"); shellsort(array, 8); for (i = 0; i < 8; i++) { printf("%d\t", array[i]); } printf("\n"); return 0; }
相关文章推荐
- 各种排序算法及c语言实现
- C语言--数组实现--各种排序算法个人总结
- c语言实现各种排序算法(作业:点名册排序)
- C语言(6) - 各种排序算法的比较
- 常用的各种排序算法(C语言实现)
- C语言各种排序算法
- C语言各种排序算法汇总
- c语言实现各种排序算法
- 常见各种排序算法(C语言实现)
- C语言实现各种排序算法
- 各种排序算法总结(C语言)
- 各种基本算法实现小结(五)—— 排序算法
- 顺序表实现之C语言(附加各种顺序表排序问题)
- 各种排序算法总结
- 各种排序算法
- 各种排序算法的原理、Java实现与比较分析(一)
- C语言各种数据类型取值范围
- C语言各种数据类型及其在系统中占的字节和取值范围
- 各种排序算法的讲解与代码实现
- 各种稳定的排序算法