zoukankan      html  css  js  c++  java
  • 排序算法之插入排序

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

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

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

    #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;
    }

    实现的结果如下:

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

  • 相关阅读:
    电脑不能连接到热点
    常用网络协议
    HVV面试
    【转载】hacker术语
    渗透测试学习路线
    系统安全——可信计算
    rsync文件同步详解
    rabbitmq集群部署高可用配置
    ansible自动化部署之路笔记
    ELK-elasticsearch-6.3.2部署
  • 原文地址:https://www.cnblogs.com/lscheng/p/2680904.html
Copyright © 2011-2022 走看看