算法排序-插入排序

64 阅读1分钟

什么是插入排序?

可以想象下打扑克牌的时候,选择一张牌插入到对应位置。 这个过程可以简单抽象成以下几个步骤: 插入规则从左侧第二张开始,与左侧元素相比较。 若小于左侧元素则进行交换,否则停止交换,往右再找下个元素。

例子

假设有若有顺序为CBDA,同时每次只能移动一格,如何进行排序成ABCD呢? 演变顺序如下

swap C&B --->BCDA
swap D&A --->BCAD
swap C&A --->BACD
swap B&A --->ABCD

伪代码

public void sort(){
   int[] data;
   for(int i=1;i<data.length;i++){
       for(int j=i-1;j>=0&&data[i]<data[j];j--){
             swap(i,j);//小于左侧的值,进行交换
       }
   }
}
时间复杂度

1+2+3+...+n-1 ~=n^2/2

稳定性

稳定的