天天看點

排序第四章:希爾排序

#define MAX_SIZE 10

typedef struct

{

int m[MAX_SIZE ];

int length;

} SqList;

//用排序,鐵定跑不了這個swap函數,最好自己寫一個

void swap(SqList *q, int i, int j);

void swap(SqList *q, int i, int j)

{

int temp = q->m[i];

q->m[i] = q->m[j];

q->m[j] = temp;

}

void shellsort(SqList *L)

{

int i, j, incream;

incream = L->length;

do

{

incream = incream / 3 + 1;    //增量序列

for (i = incream + 1; i <= L->length; i++)

{

if (L->m[i] < L->m[i - incream])

{    

L->m[0] = L->m[i];

for (j = i - incream; j > 0 && L->m[j] > L->m[0]; j -= incream)

{

L->m[j + incream] = L->m[j];//記錄後移, 查找插入位置

}

L->m[j + incream] = L->m[0];    //插入

}

}

} while (incream > 1);

}