插入排序——3希尔排序实现
Posted AsenYang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序——3希尔排序实现相关的知识,希望对你有一定的参考价值。
希尔排序又称缩小增量排序,这种排序方法先将整体的无序序列进行分组,设定每个组的大小为分组因子dk。分完组后,第i个和第i+dk个,i+2dk个,i+3dk个...元素为一个组。然后对这个组进行某种方式的排序,可以使用插入排序。
对每个组排完序之后,得到一个“有序程度”好一些的序列。然后缩小分组因子dk的值。再进行一次这样的排序。直到dk为1时,进行最后一次排序。
这样就将整个序列排序完毕了。
下面给出使用交换排序的方式实现的代码示例:
public void ShellSort(int[] ary) { for (var dk = ary.Length / 2; dk >= 1; dk = dk / 2) { // 把距离为 dk 的元素编为一个组,扫描所有组 for (int i = dk; i < ary.Length; i++) { int j = 0; int temp = ary[i];//暂存当前的值,最后一组的对应位置的值 // 对距离为 dk 的元素组进行排序,第一次排序每个组一定最多有2个元素,这时可理解为进行交换排序。 //从最后一组,向前,对应位置的两个值进行比较,实际上进行插入排序 for (j = i - dk; j >= 0 && temp < ary[j]; j = j - dk) { ary[j + dk] = ary[j]; } ary[j + dk] = temp; } } }
以上是关于插入排序——3希尔排序实现的主要内容,如果未能解决你的问题,请参考以下文章
8种面试经典!排序详解--选择,插入,希尔,冒泡,堆排,3种快排,快排非递归,归并,归并非递归,计数(图+C语言代码+时间复杂度)
8种面试经典排序详解--选择,插入,希尔,冒泡,堆排,3种快排及非递归,归并及非递归,计数(图+C语言代码+时间复杂度)
8种面试经典排序详解--选择,插入,希尔,冒泡,堆排,3种快排及非递归,归并及非递归,计数(图+C语言代码+时间复杂度)