编辑代码

#include <stdlib.h>
#include <iostream>

using std::cout;
using std::endl;

#define N 10
#define M 100
#define SWAP(x,y) {int tmp=x; x=y; y=tmp;}

void print(int *a)
{
    for(int i=0; i<N; ++i)
    {
        printf("%3d", a[i]);
    }
    printf("\n");
}

void shellSort(int *a)
{
    for(int gap = N/2; gap > 0; gap /= 2)
    {
        //来牌从gap开始的
        for(int i=gap; i<N; ++i)
        {
            int insertVal = a[i];
            int j;
            //最后一张手牌是i-gap 同组手牌相距gap
            for(j=i-gap; j>=0 && a[j]>insertVal; j-=gap)
            {
                a[j+gap] = a[j];
            }
            a[j+gap] = insertVal;
        }
    }
}
int main()
{
    srand(time(NULL));
    int *a = (int*)malloc(sizeof(int)*N);
    
    for(int i=0; i<N; ++i)
    {
        a[i] = rand() % M;
    }
    print(a);
    
    shellSort(a);
    
    print(a);
    
    free(a);
    return 0;
}