希尔排序是时间复杂度为O(nlogn),超越前面的简单排序算法。
#include <stdio.h>
#include <stdbool.h>
#define MAXSIZE 10
typedef struct{
int r[MAXSIZE+1];
int length;
}SqList;
void swap(SqList *L,int i,int j)
{
int temp = L->r[i];
L->r[i] = L->r[j];
L->r[j] = temp;
}
void ShellSort(SqList *L)//希尔排序
{
int i,j;
int increment = L->length;
do{
increment = increment/3+1;
for(i = increment +1; i < L->length; i++)
{
if(L->r[i] < L->r[i - increment])
{
L->r[0] = L->r[i];
for(j = i - increment ; j > 0 && L->r[j] > L->r[0]; j -= increment )
{
L->r[j + increment ] = L->r[j];
}
L->r[j+increment] = L->r[0];
}
}
}while(increment > 1);
}
int main(void)
{
SqList S;
S.length = 9;
S.r[0] = 0;
S.r[1] = 5;
S.r[2] = 3;
S.r[3] = 4;
S.r[4] = 6;
S.r[5] = 2;
S.r[6] = 9;
S.r[7] = 7;
S.r[8] = 8;
for(int i = 0; i < S.length;i++)
{
printf("%d ",S.r[i]);
}
printf("\r\n");
ShellSort(&S);
printf("ShelltSort: ");
for(int i = 0; i < S.length;i++)
{
printf("%d ",S.r[i]);
}
printf("\r\n");
return 0;
}