经典排序算法-希尔排序Shell sort

一、希尔排序思想

希尔排序是基于插入排序的快速的排序算法,先分组后对每组进行直接插入排序,再分组再直接执行插入排序,组元素个数按照固定规则递减。最后一次分组则是一个元素即为一组通过这次插入排序后即完成排序操作。
希尔排序更高效的原因是它权衡了子数组的规模和有序性。排序之初各个子数组都很短,排序之后子数组都是部分有序的,这两种情况都很适合插入排序

步骤如下:

0、初始状态:arr={6,4,1,8,2,3,3,7,9,2,8}
1、按间隔为4(算法中的3*h+1得来)分组结果:
{arr[0]=6,arr[4]=2},{arr[1]=4,arr[5]=3},{arr[2]=1,arr[6]=3},{arr[3]=8,arr[7]=7}剩余{9,2,8}
2、每组使用插入排序算法进行排序(交换位置)结果:
{arr[0]=2,arr[4]=6},{arr[1]=3,arr[5]=4},{arr[2]=1,arr[6]=3},{arr[3]=7,arr[7]=8}
{2,3,1,7,6,4,3,8,9,2,8}
3、接下来按1(h=h/3)分组即最后一次的插入排序,完成。

代码如下(shell sort 00)

shellsort00.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容