#include<stdio.h>
#include<stdlib.h>
void ShellSort(int*array,int length) {
int increment = length;
while (increment>1)
{
increment = increment / 2;//不断变化的增量,到一为止
for (int i = 0; i < length-increment; i++)//画图即知
{
int index = i;//起点
int temp = array[index + increment];//挂起后面的值(起点+增量)
while (index>=0)//表明前后都影响
{
if (array[index+increment]<array[index])
{
array[index + increment] = array[index];
index -= increment;//不断往后退,比较前面的数
}
else
{
break;
}
}
array[index + increment] = temp;//会走到这一步说明index已经为负数,不需要在往前走了,则为负数之前的值即是该填入的位置
}
}
}
void printArray(int* array, int size) {
for (int i = 0; i < size; i++)
{
printf("%d ", array[i]);
}
}
int main()
{
int arr[10] = { 8,5,4,2,9,1,0,3,7,6 };
printf("排列前:");
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
printf("\n\n");
ShellSort(arr, 10);
printf("排列后:");
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
printf("\n\n");
return 0;
}
参考: