shell排序就是先分组,分组后每组对应位置的数据一起比较大小,交换其位置,第一次分组排序结束后,将分组二分缩小,重复上述操作,最后直至分组分到以每个元素为单位,结束排序。
void ShellSort(int arr[], int length){//该数组下标从0开始
int group, i, j, temp;//j是其他组*对应i所在组的相对位置*的位置
for (group = len / 2; group > 0; group /= 2){//每次排完后不断将分组二分,直至为1
for (i = group;i < length; i++){//从第二组的第一个位置走到数组最后,在每个位置上判断比当前组号小的组,比较它们组内对应位置的大小相比
for (j = i - group; j >= 0; j-=group){//找出所有比当前i所在组号小的组内的一个位置,它们在组内的位置与i在当前组的相对位置对应,进行比较
if (arr[j] > arr[j + group]){
temp = arr[j[;
arr[j] = arr[j + group];
arr[j + group] = temp;
}//每组对应位置比较大小,交换顺序
}
}
}
}