插入排序改进
使用gap 每次折半进行插入排序,最后一次步长为1,肯定排好序
将大的值小的值聚集在一起
直接在插入排序基础上加一层gap变化,把里面的步长变化由1改为gap
#include<iostream>
using namespace std;
void printArray(int* array, int len)
{
for (int i = 0; i < len; i++)
{
cout << array[i] << '\t';
}
}
void shellSort(int* array, int len)
{
for (int gap = len / 2; gap > 0; gap = gap / 2)
{
for (int i = gap; i < len; i+= gap)
{
int key = array[i];
int j = i - gap;
while (j >= 0 && key < array[j])
{
array[j + gap] = array[j]; //后移
j--;
}
array[j + gap] = key;
}
}
}
int main()
{
int array[] = { 3,13,43,23,65,23,1,9,15,8 };
int len = sizeof(array) / sizeof(int);
printArray(array, len);
cout << '\n';
shellSort(array, len);
printArray(array, len);
return 0;
}