几个基础算法介绍和实现——插入排序

来源:互联网 发布:云计算 大数据 编辑:程序博客网 时间:2024/06/14 02:05

最简单的排序算法之一是插入排序

插入排序由N-1趟(pass)排序组成,对于P=1趟到p=N-1趟,插入排序保证从位置0到位置P上的元素为已排序状态。

插入排序利用这样的事实:位置0到位置P-1上的元素都是已排序过的。


简单来说就是长度为N的序列,前P个元素有序,第P+1个到第N—1个元素为无序,则将第P+1个元素与前P个元素逐个比较,逆序交换,看上去就像往前P个有序序列的合适位置插入一个元素,直到所有无序元素都插入到有序中。

算法描述:
1. 从第一个元素开始,只有一个元素时认为是有序的
2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
4. 重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置
5. 将新元素插入到该位置后
6. 重复步骤 2~5


代码如下:

void Sort::insertSort(int (&a)[10], int n){    int i, position;    int temp;    for (position = 1; position < n; position++)    {        temp = a[position];        for (i = position; i > 0 && a[i - 1] > temp; i--)        {                   a[i] = a[i - 1];                        }        a[i] = temp;    }}int main(void){    Sort m_sort;    int a[10] = { 34, 8, 64, 51, 32, 21, 99, 108, 54, 33 };    m_sort.insertSort(a,10);    for (int i = 0; i < 10; i++)    {        cout << a[i] <<endl;    }    system("pause");    return EXIT_SUCCESS;}

运行结果:

这里写图片描述


总结:
1. 插入排序的平均时间复杂度是O(n2)
2. 插入排序为稳定排序

原创粉丝点击