1.控制shell增量值(最外層循環)
2.控制組數
3.進入組內循環:①當前元素a[j]的後壹個數為最小的值temp
②比較當前元素a[j]與最小的值temp:
如果temp小於a[j],就將a[j]後移,並且讓仿真指針前移,循環比較
③當最內層循環結束時,就找到了temp插入的位置
*/
void ShellSort2(DataType a[],int n,int d[],int D_length){
int i,j,m,span,temp,k;
for(m = 0; m < D_length; m++){
span = d[m];/*span表示shell增量值*/
for(k = 0; k < span; k++){//控制組數
for(i = k; i < n-span; i = i+span){//控制組內比較趟數
temp = a[i+span];//把當前元素的後壹個數用temp保存起來,
j = i;
while(temp <= a[j] && j > -1){//將temp看出是最小的值,與前面的值比較
a[j+span] = a[j];//前壹個數大於當前元素,直接覆蓋當前元素;即將大數往後挪
j = j - span;//並讓仿真指針向前移,繼續把當前值與其前面的元素進行比較
}
a[j+span] = temp;//將temp填充到空位
}
}
}
}