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

    最近会把各种排序都做一个总结,总觉得写后台没什么意思,那就先复习复习算法吧

    相信大家对于插入排序肯定不会陌生了,它适合于少量数据的排序,时间复杂度为O(n^2),空间复杂度为O(1)(记录插入的数据 )

    从某种程度上来讲要优于冒泡排序

    下面简单的介绍一下插入排序算法的核心思想

    这种算法是基于递归思想的,要将[0..n-1]这个数组进行排序

    先假设对于较小数组[0..n-2]的排序已经解决,从右往左的扫描这个数组,如果遇见的第一个小于或等于A[n]的元素,就把A[n]放在这个元素的后面

    代码如下

     1 forint i=1;i++;i<n)
     2   {
     3     int v=i;
     4     int j=i-1;
     5     while(j>0){
     6       if(a[j]>v){
     7         a[j+1]=a[j];
     8         j--;
     9         }
    10       a[j+1]=v;
    11      }
    12   }



    分析一下时间复杂度

    在最坏情况下a[j]>v的的执行次数会达到最大,也就是每个j都要执行一次

    所以比较次数是:n(n-1)/2

    插入排序的优势

    对无序元素对的分析得知,这种排序的平均比较次数是是n^2/4

    而这个数据在遇到基本有序数组的时候会更小,这让它优于其他的两个竞争对手:选择排序和冒泡排序

  • 相关阅读:
    这个是我得标题:1548669163
    Mahout学习
    MySQL
    Ubuntu
    java小程序100例
    java实现链表从尾部输出
    空格替换
    java 实现二维数组查找
    JAVA实现分页
    java 程序参数详解
  • 原文地址:https://www.cnblogs.com/QuixoteY/p/9905507.html
Copyright © 2011-2022 走看看