编辑代码

#include <stdio.h>
void Insertsort(int a[],int n);
void print_arr(int a[],int n);
int main () {
    int a[10] = {8,7,5,2,3,6,9,9,6,4};
    int n = 10;
    //Insertsort(a,n);
    Shellsort(a,n);
    print_arr(a,n);
	return 0;
}

void print_arr(int a[],int n){
    for(int i = 0 ; i < n ; i++){
        printf("%d ",a[i]);
    }
    printf("\n");
    return;
}

//直接插入排序
void Insertsort(int a[],int n){
    int j;
    for(int i = 1 ; i < n ; i++){
        int temp = a[i];
        for(j = i-1 ; j >=0 ; j-- ){
            if(a[j]>=temp) a[j+1] = a[j];
            else break;
        }
        a[j+1] = temp;
    }
    return ;
}

void Shellsort(int a[],int n){
    //每次处理的间隔不同
    int d ; //每次的间隔大小
    int temp; //临时变量
    int k;
    for(d = n/2 ; d >=1 ; d/=2){
        for(int i = 0 ; i < d ; i++){   //避免重复计算同意序列
            
            for(int j = i+d ; j < n ; j+=d){
                int temp = a[j];
                for( k = j-d ; k >=i ; k-=d ){
                    if(a[k]>=temp) a[k+d] = a[k];
                    else break;
                }
                a[k+d] = temp;
            }
            
        }
        print_arr(a,n);
            
    }
    return;



}