本来以为希尔排序是挺简单的,但是自己写数组试了试却发现总是排不好,在草稿纸上照着程序步骤演算过来,发现每次缩小一半的区间再排序一次的话,不一定能确保这个区间完全有序,需要设立一个标识=交换次数,在每次排序后,再走一次,如果标识为0,才可以进行下一次区间减半。
void shellsort(vector<int> input) { int len=input.size(); int ban=len/2; while(ban>0) { int x; do{ x=0; for(int i=ban;i<len;++i) { int j=i-ban; if(input[j]>input[i]) { swap(input[j],input[i]); ++x; } }}while(x>0); ban/=2; }