编辑代码

#include <stdio.h>

// 性质: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;
        }
    }
}