//由小到大 //希爾排序 void shellSort( long int array[], int length) { int i; int j; int k; int gap; //gap是分組的步長 long int temp; //希爾排序是在直接插入排序的基礎上實現的,所以仍然需要哨兵 for(gap=length/2; gap>0; gap=gap/2) { //以GAP為間隔分組 for(i=0; i<gap; i++) { /* 每一組做插入排序 */ for(j=i+gap; j<length; j=j+gap) { //如果當前元素比這一組中的前一個元素要小 if(array[j] < array[j - gap]) { //記錄當前這個更小的元素 temp temp = array[j]; //哨兵 k = j - gap; //把這一組中之前所有比temp小的元素都往后挪一個位置 while(k>=0 && array[k]>temp) { array[k + gap] = array[k]; k = k - gap; } //把挪出來的空位,放入temp array[k + gap] = temp; } } } } }