zoukankan      html  css  js  c++  java
  • 直接插入排序

         直接插入排序简称插入排序,对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入

    到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。在其实现过程中使用双层循环,外层循环对除了第一个元素之外的所有元素,

    内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。下面通过一个例子来形象的介绍一下插入排序的原理。

        在我们打牌的时候,起初我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一

    张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。拿在左手上的牌总是排序好的,原来这些牌是桌子上牌堆中顶部的牌。

        下面上一张图来展示一下

        接下来用代码展示一下

     1 #include<iostream>
     2 using namespace std;
     3 
     4 void insertsort(int a[],int n)  //插入排序;升序排列
     5 {
     6       bool flag;
     7       int i,j,tem=0;
     8       for(i=1;i<n;i++) //刚开始有序表中只有a[0],i指向待插入的序列
     9       {
    10           tem=a[i];
    11           flag=false;  //设置哨兵,用来标记是否找到了插入位置,初始假设没找到
    12           for(j=i-1;j>=0;j--)  //查找待插入位置,j指向有序表中最后一个元素
    13           {
    14               if(a[j]>tem)
    15               {
    16                  a[j+1]=a[j];
    17                  flag=true;   //找到待插入位置了,继续再找
    18               }
    19               else   //此时有序表中j所指的数不大于待插入元素,结束查找
    20                   break;
    21           }
    22           if(flag==true) //找到待插入位置了,可以插入
    23               a[j+1]=tem;  
    24           cout<<""<<i<<"次待插入的数据是:"<<tem<<endl;
    25           cout<<"此时有序表中的数据位:";
    26           for(j=0;j<=i;j++)
    27               cout<<a[j]<<" ";
    28           cout<<endl;
    29           
    30       }
    31 }
    32 int main()
    33 {
    34     int a[10]={34,4,78,35,3,64,45,18,26,35};
    35     insertsort(a,10);
    36     cout<<"执行插入排序后数组为:";
    37     for(int i=0;i<10;i++)
    38         cout<<a[i]<<" ";
    39     return 0;
    40 }

    写的比较详细,测试结果如下:

    下面说一下时间复杂度和空间复杂度:

    空间复杂度:由于排序过程中只用到了一个辅助空间,所以为空间复杂度位为 O(1)

    时间复杂度:在进行排列时,最好的情况是序列已经是有序(升序或降序)的了,比较次数为(n-1)次;最坏的情况为序列是反有序(降序或升序),比较次数(n-1)*n/2,

    基本操作执行(n-1)*n/2 + (n-1)次。所以算法平均的时间复杂度为O(n2)。另外,在数据量很大的时候,插入排序就不再适用了,它只适用于数据量较小的情况。

  • 相关阅读:
    Ubuntu16.04 + OpenCV源码 + Qt5.10 安装、配置
    DML和DQL
    初识MySql
    表单校验
    使用jQuery操作DOM
    jQuery中的事件与动画
    jQuery选择器
    初识jQuery
    JavaScript对象及初识OOP
    JavaScript操作DOM对象
  • 原文地址:https://www.cnblogs.com/buanxu/p/12809445.html
Copyright © 2011-2022 走看看