插入排序的优化
需求:
排序前:{9,1,2,5,7,4,8,6,3,5 };
排序后:{1,2,3,4,5,5,6,7,8,9};
排序原理:
1、选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组
2、对分好组的每一组数据完成插入排序
3、减少增长量,最小减为1,重复第二步操作
增长量h的确定:增长量h的值每一固定规则
int h = 1;
while(h<数组的长度/2)
{
h=2h+1;
}
h的减小规则:h=h/2
#include<iostream>
using namespace std;
void swap(int Arr[], int i, int j)
{
int temp = Arr[i];
Arr[i] = Arr[j];
Arr[j] = temp;
}
int main()
{
int arr[] = { 9,1,2,5,7,4,8,6,3,5 };
int len = sizeof(arr) / sizeof(arr[0]);
int h = 1;
while (h < len / 2)
{
h = 2 * h + 1;
}
while (h >=1)
{
//找到代插入元素
for (int i = h;i < len;i++)
{
//把代插入元素插入到有序数列中
for (int j = i;j >= h;j -= h)
{
//代插入j
if (arr[j - h] > arr[j])
{
swap(arr,j-h,j);
}
else
{
break;
}
}
}
h = h / 2;
}
for (int i = 0;i < len;i++)
{
if (i != len)
{
cout << arr[i] << ",";
}
else
{
cout << arr[i] << "";
}
}
cout << endl;
system("pause");
return 0;
}