美文网首页
插入排序

插入排序

作者: 卡布萨岛 | 来源:发表于2018-10-24 06:56 被阅读0次

    从整个待排序列中选出一个元素插入到已经有序的子序列中去,得到一个有序的、元素加一的子序列,直到整个序列的待插入元素为0,则整个序列全部有序。

    在实际的算法中,我们经常选择序列的第一个元素作为有序序列(因为一个元素肯定是有序的),我们逐渐将后面的元素插入到前面的有序序列中,直到整个序列有序。

    代码

    #include<stdio.h>
    #include<stdlib.h>
    void InsertionSort(int *a,int n);
    void main()
    {
        int a[] = {2,4,6,8,0,1,5,9,7,3};
        int i;
        InsertionSort(a,10);
        for(i = 0;i<10;i++)
        {
          printf("%d ",a[i]);
        }
        printf("\n");
        system("pause");
    }
    
    void InsertionSort(int *a,int n)//插入比前一个大的比后一个小的 ,n为传入的数组元素个数
    {
      int temp;
      int in,out;
      for(out = 1;out<n;out++)    //out为传出将要插入的数组标号(从1开始)
      {
          temp = a[out];    //先把传出的元素赋值给temp
          in = out;         //in为传人将要插入的数组标号
          while(in>0 && a[in-1]>=temp)  //当传入的数组标号大于0并且前一个大于
          {                              //temp的值时
                a[in] = a[in-1];//当传入插入的前一个元素大于temp时,将元素后移
                in--;
          } //直到传入插入的前一个元素小于temp时退出循环
            a[in] = temp;  //当传入插入的前一个元素小于temp时,最后一次循环将元素后移,in--,将插入的元素传入in
      }
    }
    

    运行结果:

    Front
    2 4 6 8 0 1 5 9 7 3
    Back
    0 1 2 3 4 5 6 7 8 9
    

    时间复杂度

    平均来说插入排序算法的时间复杂度为O(n^2)
    

    总结:

    如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数加上 (n-1)次。平均来说插入排序算法的时间复杂度为O(n^2)

    相关文章

      网友评论

          本文标题:插入排序

          本文链接:https://www.haomeiwen.com/subject/qizzzftx.html