// 性质:1、时间复杂度:O(nlogn) 2、空间复杂度:O(1) 3、非稳定排序 4、原地排序
void print(int (* arr)[], int length);
void shell_sort(int * arr, int length);
int main () {
int arr[] = {5, 3, 6, 3, 2, 1, 8, 43, 7, 5, 4};
int length = sizeof(arr) / sizeof(*arr);
print(&arr, length);
printf("\r\n");
shell_sort(arr, length);
print(&arr, length);
return 0;
}
void print(int (* arr)[], int length) {
for(int i = 0; i < length; i++) {
printf("%d ", *((* arr) + i) );
}
}
void shell_sort(int * arr, int length){
for(int j = length/2; j > 0; j /= 2){
for(int k = j; k < length; k++){
int temp = *(arr + k);
int i;
for(i = k - j ; i >= 0 && temp < *(arr + i); i -= j){
*(arr + i + j) = *(arr + i);
}
*(arr + i + j) = temp;
}
}
}