排序思路:分组进行插入排序
先以数组长度的一半的间隔分组,各组内用插入排序;间隔减半再分组进行组内排序,直到间隔为1,再进行一次插入排序即可。
代码的实现:
/*shellSort*/
for(int gap = N/2;gap > 0;gap /= 2){/*划分间隔*/
for(int i = gap; i < N; i++){
/*保存待插入元素*/
int insertVal = arr[i];
/*保存待插入的位置*/
int insertIndex = i;
/*待插入元素与间隔前的一个元素比较*/
while(insertVal < arr[insertIndex-gap] && insertIndex-gap>=0){
/*若间隔前还有元素,且大于待插入元素,向后移*/
arr[insertIndex] = arr[insertIndex-gap];
/*更新待插入位置索引*/
insertIndex -= gap;
}
/*插入小的元素*/
arr[insertIndex] = insertVal;
}
}