#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define ARRAY_SIZE 10
void shellInsert(int* sortArray, int sortSize, int delt) //delt是步长
{
int i, j, temp;
for(i=delt;i<sortSize;i++)
if(sortArray[i]<sortArray[i-delt])
{
temp = sortArray[i];
for(j=i-delt; j>=0 && sortArray[j]>temp; j-=delt)
sortArray[j+delt] = sortArray[j];
sortArray[j+delt] = temp;
}
}
void shellSort(int* sortArray, int sortSize, int* deltArray, int deltSize)
{
int i;
for(i=0;i<deltSize;i++)
shellInsert(sortArray, sortSize, deltArray[i]);
}
int main()
{
int sortArray[ARRAY_SIZE]={30, 29, 45, 33, 21, 3, 108, 75, 99, 66};
int i;
int deltArray[3]={4, 2, 1};
shellSort(sortArray, 10, deltArray, 3);
for(i=0;i<10;i++)
printf("%d ", sortArray[i]);
printf("\n");
}
|