Skip to content

Latest commit

 

History

History
57 lines (47 loc) · 2.05 KB

5.希尔排序.md

File metadata and controls

57 lines (47 loc) · 2.05 KB

希尔排序

  • 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。
  • 排序思路:
  • 1.希尔排序可以理解为插入排序的升级版, 先将待排序数组按照指定步长划分为几个小数组
  • 2.利用插入排序对小数组进行排序, 然后将几个排序的小数组重新合并为原始数组
  • 3.重复上述操作, 直到步长为1时,再利用插入排序排序即可
  • 代码实现:
intmain() { // 待排序数组intnums[5] = {3, 1, 2, 0, 3}; // 0.计算待排序数组长度intlen=sizeof(nums) / sizeof(nums[0]); // 2.计算步长intgap=len / 2; do{ // 1.从第一个元素开始依次取出所有用于比较元素for (inti=gap; i<len; i++) { // 2.遍历取出前面元素进行比较intj=i; while((j-gap) >= 0) { printf("%i > %i\n", nums[j-gap], nums[j]); // 3.如果前面一个元素大于当前元素,就交换位置if(nums[j-gap] >nums[j]){ inttemp=nums[j]; nums[j] =nums[j-gap]; nums[j-gap] =temp; }else{ break; } j--; } } // 每个小数组排序完成, 重新计算步长gap=gap / 2; }while(gap >= 1); }

江哥提示: 对于初学者而言, 排序算法一次不易于学习太多, 咋们先来5个玩一玩, 后续继续讲解其它5个 公众号 代码情缘 回复 C语言代码 获取配套视频教程

最后,如果有任何疑问,请加微信 leader_fengy 拉你进学习交流群。

开源不易,码字不易,如果觉得有价值,欢迎分享支持。

close