zoukankan      html  css  js  c++  java
  • C语言排序算法——插入排序算法

    直接插入排序的基本操作是将一个记录插入到已经排好的有序表中。

    先选定一个位置i,插入排序将i左侧比位置i数值大的数值全部右移,然后将原来i对应的值插入回去。

     1 void InsertSort(int *p)
     2 {
     3     int i,j;
     4     int tmp=0;
     5     for(i=1;i<10;i++)
     6     {
     7         if(p[i-1]>p[i])
     8         {
     9             tmp = p[i];    //将p[i]左边比p[i]大的全部左移,要先将其赋给一个缓存变量
    10             for(j=i-1;p[j]>tmp;j--)
    11             {
    12                 p[j+1]=p[j];
    13             }
    14             p[j+1]=tmp;
    15         }
    16     }
    17 }

    过程,先将p[i]的值赋给tmp,然后i左侧的数值与tmp比较,比tmp大则右移一位,不比tmp大,则将tmp插入回去。

    最好情况下,即要排序的序列本身是有序的,第7行的比较一共执行了n-1次,没有移动记录,时间复杂度为O(n)。

    最坏情况下,需要比较2+3+...+n=(n+2)(n-1)/2次,移动次数为(n+4)(n-1)/2

    时间复杂度为O(n2)

  • 相关阅读:
    操作系统指纹
    扫描工具
    ms08_067利用过程
    SQL注入攻击
    SMB/CIFS协议解析
    蓝桥杯 历届试题 大臣的旅费
    九度oj 题目1009:二叉搜索树
    蓝桥杯 算法提高 6-17 复数四则运算
    poj 2182 Lost Cows
    poj 2501 Average Speed
  • 原文地址:https://www.cnblogs.com/DaLiNDluDlu/p/5258346.html
Copyright © 2011-2022 走看看