1. 排序原理
2. 基本思想
设初始序列有n个元素,选定一个小于n大于或等于1的整数gap作为间隔,将全部元素分成gap个子序列,所有距离为gap的元素放在同一个子序列中,在每个子序列中分别采用直接插入算法进行排序;然后缩小间隔gap,如令gap=gap/2,重复上面的子序列划分和子序列排序动作;直到最后去gap=1,将所有的元素放到一个序列中为止。
3. C++程序实现:
void shellsort(std::vector<int> & a) { // gap:增量,每次除以2,或者除以3然后+1 for(int gap = a.size()/2; gap>0;gap/=2) //增量gap { // i:以gap增量分组的 “组号编号 ”,因为从i=gap之后的i++都一定有gap分组 for(int i=gap;i<a.size();i++) { int tmp = a[i]; int j=i; // j:对每组的 i 之前的数进行插入排序 for(; j>=gap; j=j-gap) { if(tmp < a[j-gap]) { a[j] = a[j-gap]; } else { break; } } a[j] = tmp; print(a); } } }