排序算法之插入排序

插入排序 算法思路:和桥牌中类似,每次只考虑一张牌,将新来的牌插入已经排好序的牌中的适当的位置中。在计算机应用中,为了插入新数据,先将较大的数据项一个个向右移动,然后将新数据插入空位中。

和选择排序算法一样,排序过程中当前数据项的左边是排好的,不过它们不是处于最后的位置上,因为之后它们可能还需要进行移动来为更小的数据腾出空间。当索引移到最右边时,数组就完全排序好了。

一个高效的插入排序的实现:

#include <iostream>
#include <stdlib.h>
using namespace std;
template <typename Item>
void insertion(Item a[], int l, int r)    
{
    int i;
    for (i=l;i<=r;i++)
    {
        int j=i;
        Item v=a[i];
        while (v<a[j-1])
        {
            a[j]=a[j-1];
            j--;
        }
        a[j]=v;
    }
}
void main()
{
    int i;
    int N=10;
    int *a=new int[N];
    int sw=1;

    if(sw)
    {
        for(i=0;i<N;i++)
            a[i]=1000*(1.0*rand()/RAND_MAX);
    }
    else
    {
        N=0;
        while(cin>>a[N])
            N++;
    }
    for(i=0;i<N;i++)
        cout<<a[i]<<" ";
    cout<<endl;
    insertion(a,0,N-1);

    for(i=0;i<N;i++)
        cout<<a[i]<<" ";
    cout<<endl;
}

实现的结果如下:

和选择排序不同的是,插入排序的运行时间和输入文件数据的原始排列顺序有很大关系。

posted @ 2012-09-11 22:20  lscheng  阅读(203)  评论(0编辑  收藏  举报