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

    参考文章:

    算法描述:

    对于给定的一个数组,初始时假设第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列中为止

    代码实现:

        public void insertSort(int a[]){  
                int length=a.length; //数组长度  
                int j;               //当前值的位置  
                int i;               //指向j前的位置  
                int key;             //当前要进行插入排序的值  
                //从数组的第二个位置开始遍历值  
                for(j=1;j<length;j++){  
                    key=a[j];  
                    i=j-1;  
                    //a[i]比当前值大时,a[i]后移一位,空出i的位置,好让下一次循环的值后移  
                    while(i>=0 && a[i]>key){  
                        a[i+1]=a[i]; //将a[i]值后移  
                        i--;         //i前移  
                    }//跳出循环(找到要插入的中间位置或已遍历到0下标)  
                    a[i+1]=key;    //将当前值插入  
                }  
            }  

    算法分析:

    • 时间复杂度:O(n2)  最好O(n) 最坏O(n2
    • 空间复杂度:O(1)  用于记录需要插入的数据
    • 稳定性:稳定
  • 相关阅读:
    GCC编绎详解
    GUN C/C++ __attribute__ 用法 转
    rust 参考的资料 转
    Eclipse环境安装rust
    GNU Debugger for Windows----GDB
    minGW cygwin gnuwin32
    tdm-gcc
    GNU tools
    The MinGW and mingw-w64 projects.----GCC
    crosstool-NG
  • 原文地址:https://www.cnblogs.com/amei0/p/8283463.html
Copyright © 2011-2022 走看看