C笔记 - 算法:希尔排序
2022/4/13 20:13:58
本文主要是介绍C笔记 - 算法:希尔排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
希尔排序
1 - 1959 年 Shell 发明的第一个突破 O(n2) 的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于它会优先比较距离较远的元素
2 - 希尔排序又叫缩小增量排序,它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止
① 第一趟,gap = length/2 = 4
② 第二趟,增量缩小为 2
③ 第三趟,增量缩小为 1,得到最终排序结果
3 - 代码示例
1 // 数组 2 int array[] = {12,91,21,10,13}; 3 int length = sizeof(array)/sizeof(array[0]);// 5 个元素 4 5 6 // 最外层控制增量,循环缩小 7 for (int gap = length/2; gap > 0; gap = gap/2) { 8 9 // 中间控制需要遍历的趟数:趟数 + gap = length 10 // 如 gap = 1,需遍历 4 趟; gap = 2;需要遍历 3 趟....... 11 for (int i = gap; i < length; i++) { 12 13 14 printf("----- gap = %d 第 %d 趟 ------\n\n",gap,i-gap +1); 15 int j = i; 16 int current = array[i]; 17 18 while (j - gap >= 0 && current < array[j - gap]) { 19 array[j] = array[j - gap]; 20 j = j - gap; 21 } 22 array[j] = current; 23 24 int n = 0; 25 while (n < length) { 26 printf("%d\t",array[n]); 27 n++; 28 } 29 printf("\n\n"); 30 } 31 32 }
日志打印
这篇关于C笔记 - 算法:希尔排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享