在理解插入排序算法的基础上稍加调整,增加一个分组的维度就可以实现希尔排序算法
#include <stdio.h>
#define DATA_ARRAY_SIZE 10
typedef int DataType;
void DisplayArray(DataType data[], int size)
{
for(int i=0; i<size; i++) {
printf("%d ", data[i]);
}
printf("\n");
return;
}
void ShellSort(DataType src[], const int size);
int main()
{
DataType srcData1[DATA_ARRAY_SIZE] = {3,2,4,6,9,1,21,43,29,59};
ShellSort(srcData1, DATA_ARRAY_SIZE);
DisplayArray(srcData1, DATA_ARRAY_SIZE);
return 0;
}
void ShellSort(DataType src[], const int size)
{
DataType val;
int distance = size / 2;
while (distance > 0) {
for (int i = distance; i < size; i++) {
int j = i - distance;
val = src[i];
while (j >= 0 && val > src[j]) {
src[j + distance] = src[j];
j -= distance;
}
src[j + distance] = val;
}
distance /= 2;
}
}