思路:
1、希尔排序就是分批次的插入排序
2、先取一个增量 inc=数组长度/2
3、定义一个 i =inc ,在定义一个 key=arr[i]
4、开始遍历,首先在第一次增量 inc 下,因为我要将每个元素都进行比较,所以我要对 i 进行 for循环 ,结束条件 i<len , 在 i 下我们要定义一个 j ,让j=i ,在进行遍历,条件是 j>=inc && key<arr[j-inc]
#include <iostream>
void shellSort(int arr[], int len) {
int i, j, inc, key;
for (inc = len / 2; inc > 0; inc /= 2) {
for (i=inc; i < len; i++) {
key = arr[i];
for (j = i; j >= inc && key<arr[j-inc]; j -= inc) {
arr[j] = arr[j - inc];
arr[j-inc] = key;
}
}
}
}
int main()
{
int arr[6] = { 7,6,5,4,3,2 };
shellSort(arr, 6);
for (int i = 0; i < 6; i++) {
printf("%d", arr[i]);
}
}
希尔排序中相等数据可能会交换位置,所以希尔排序是不稳定的算法