原创博文,转载请注明出处!
# 基本思路
希尔排序是”直接插入排序“的改进版,也称为“缩小增量排序”。基本原理:先将待排序的数组元素分成多个序列,使得每个子序列的元素个数相对较小,然后对每个子序列分别进行直接插入排序,带整个待排序序列基本有序后,最后再对多有元素进行一次直接插入排序。
# C++代码
1 2 for(int gap=vec.size()/2;gap>0;gap/=2) 3 { 4 5 for(int i=gap;i<vec.size();++i) 6 { 7 int j=i; 8 while(j-gap>=0 && vec[j-gap]>vec[j]) 9 { 10 vec[j-gap] = vec[j-gap]+vec[j]; 11 vec[j] = vec[j-gap]-vec[j]; 12 vec[j-gap] = vec[j-gap]-vec[j]; 13 j=j-gap; 14 } 15 } 16 } 17 18 for(int i=0;i<vec.size();++i) 19 { 20 cout<<vec[i]<<endl; 21 } 22