从零开始的算法指南大概是代码注释最详细的希尔排序笔记

Posted 拼音加数字

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始的算法指南大概是代码注释最详细的希尔排序笔记相关的知识,希望对你有一定的参考价值。

基本思想

 将排序表分割成若干个字表L(i, i + d, i + 2d, ..., i + kd)对每个子表分别进行插入排序。下一趟分割将d减小,使得部分有序的子表变大。当d = 1时,排序表全表有序。d通常被成为步长,d可以根据具体情况进行取值,不过一般情况第一趟一般取表长的一半。

算法代码

  
    
    
  
void sort_shell ( vector < int > & A , int n ) { //传入排序表和表长 n = A.size()
for ( int d = n / 2 ; d >= 1 ; d = d / 2 ) //设置每趟排序的步长
{
for ( int i = 1 + d ; i <= n ; ++ i ) { //一趟排序
if ( A [ i ] < A [ i - d ] ) { //将A[i]插入有序部分
A
[ 0 ] = A [ i ] ; //暂存在A[0]
for ( int j = i - d ; j > 0 && A [ 0 ] < A [ j ] ; j -= d ) { //找到插入位置
A
[ j + d ] = A [ j ] ;

}
A
[ j + d ] = A [ 0 ] ; //完成插入操作
}
}
}

}

以上是关于从零开始的算法指南大概是代码注释最详细的希尔排序笔记的主要内容,如果未能解决你的问题,请参考以下文章

C语言排序

小橙书阅读指南——希尔排序及改进算法

常见排序算法的实现(归并排序快速排序堆排序选择排序插入排序希尔排序)

常见排序算法——希尔排序

排序算法总结

排序算法之希尔排序