#include<iostream>
using namespace std;
void insertsort(int *a, int sz) //插入排序
{
for (int i = 1; i < sz; ++i)
{
int k = a[i]; //保留要插入的值
int end = i-1;
while (end >= 0 && a[end]>k) //如果要插入的值小于前面的值进入循环
{
a[end + 1] = a[end]; //先把前面的值往后面挪一位
end--; //把end的标记--一下 , 因为end标记最开始在0号位置,减1会变成-1
}
a[end + 1] = k; //所以插入元素的时候要给end+1;
}
}
void shellinsertsort(int *a, int sz) //希尔插入排序
{
int gap = 2;
while (gap > 0)
{
for (int i = gap; i < sz; ++i)
{
int k = a[i];
int end = i - gap;
while (end >= 0 && a[end]>k)
{
a[end + gap] = a[end];
end -= gap;
}
a[end + gap] = k;
}
gap--;
}
}
int main()
{
int a[10] = { 0, 1, 2, 4, 5, 8, 6, 7, 9, 3 };
insertsort(a, 10);
shellinsertsort(a, 10);
for (int i = 0; i < 10; ++i)
{
cout << a[i] << " ";
}
cout << endl;
system("pause");
return 0;
}