希尔排序:
图解:
第一步:
第二步:
第三、四步:
第五步:
重点1,2步的原理。后面一样的我道理。
实现代码:
//希尔排序
void Hill(int a[], int length, int grep) {
//三个参数:存放数据的数组,数据长度,间隔
//数据长度的确定可以:
//int length = sizeof(array) / sizeof(array[0]);
int grep = length / 3 + 1; // 确定间隔数
while (grep) {
int i = 0;
for (i = grep; i < length;i++) { //查找数据的循环
int j = 0;
int k = a[i];
//给数据找位置
for (j = i - grep; j >= 0; j = j - grep) {
if (a[j] <= k) { // 1 2 3这样的顺序,由小到大
break;
}
else {
a[j + grep] = a[j];
}
}
a[j + grep] = k;
}
grep--;
}
}