一、希尔排序(缩小增量排序)
至于什么是缩小增量排序呢?当增量为1时便是直接插入排序,而希尔排序是一i+增量为一个序列,对这个序列进行排序,然后逐渐缩小到1。
二、算法实现
int sqTable[] = { 0,49,38,65,97,76,13,27,49};//其中[0]位置储存的是哨岗
int length = (sizeof(sqTable) / sizeof(int))-1;//不要第一个位置
void PrintTable(){
for (int i = 1; i <= length; i++)
{
printf("%d:", sqTable[i]);
}
printf("\n");
}
//希尔排序=======缩小增量排序 也属于插入排序======
//将数组按照dk增量分成若干个进行插入排序上 当dk==1的时候便是直接插入排序
//一般dk是一个数组序列,最后一个元素是1进行最后的排序
void ShellInsert(int dk){
for (int i = dk+1; i <= length; i++)
{
if (sqTable[i]<sqTable[i-dk])
{
//当前的是针对[i]个元素
//比上一个元素小的时候
sqTable[0] = sqTable[i];
int j = i - dk;
for (; j > 0 && sqTable[0] < sqTable[j]; j -= dk)
{
//往后面移动一位
sqTable[j + dk] = sqTable[j];
}
sqTable[j + dk] = sqTable[0];
}
}
}