插入排序:不断地将待排序序列插入到有序序列中,使有序序列逐渐扩大,直至所有待排元素全插入到有序序列中来。
直接插入排序和希尔排序
直接插入排序是一种比较简单的排序方法,它的基本思想是将待排序列中的每个元素依次插入到有序序列中。
希尔插入排序是先将待排序列分为几组,从而减小参与直接插入排序的数据量。就是先进行组内的直接插入排序,最后进行整个序列的排序。
代码如下:
直接插入:
#include<iostream>
using namespace std;
// 输入数组a[]的第一个元素不参与排序
void insertSort(int a[], int n)
{
for (int i = 2; i <= n; i++)
{
a[0] = a[i];
int j = i - 1;
while(a[0] < a[j] && j > 0 )
{
a[j + 1] = a[j];
j = j - 1;
}
a[j + 1] = a[0];
}
}
int main()
{
int arry[10] = {9,6,4,7,3,8,1,0,12,5};
insertSort(arry, 10);
for (int i = 1; i < 10; i++)
{
cout << arry[i] << ends;
}
cout << endl;
system("pause");
return 0;
}
希尔排序:
#include<iostream>
using namespace std;
void xiersort(int a[], int n)
{
for (int d = n/2; d >= 1; d = d/2)
{
for (int i = d + 1; i <= n; i++)
{
a[0] = a[i];
int j = i - d;
while (j > 0 && a[0] < a[j])
{
a[j + d] = a[j];
j = j - d;
}
a[j + d] = a[0];
}
}
}
int main()
{
int arry[10] = {2,34,5,7,4,3,9,8,7,10};
xiersort(arry, 10);
for (int i = 1; i < 10; i++)
cout << arry[i] << ends;
cout << endl;
system("pause");
return 0;
}