什么是插入排序?
可以想象下打扑克牌的时候,选择一张牌插入到对应位置。 这个过程可以简单抽象成以下几个步骤: 插入规则从左侧第二张开始,与左侧元素相比较。 若小于左侧元素则进行交换,否则停止交换,往右再找下个元素。
例子
假设有若有顺序为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
稳定性
稳定的