插入排序
类比:如果你会玩斗地主,那么摸牌后按从小到大插入,你这样插入的过程就是插入排序
程序:在程序中的玩法就像有一个人发牌,发齐了再拿牌,也就是一开始你就有17张牌,这17张牌对应17个元素的数组。你从第二种牌开始进行调动,如果第二张牌比第一张牌小,那么就把第二张牌抽出来,然后把第一张牌放入到第二张牌的位置,再把抽出的牌放到第一张牌的位置,那么前两张牌就排好了;就是这样依次类推的过程就是我们程序实现的原理。
代码如下:
public static void insertionSort(int[] a) {
//以免重复计算数组的长度
int len = a.length;
//从第二个元素开始进行操作
for (int i=1; i<len; i++) {
//把这种元素提出来
int key = a[i];
int j = i -1;
//去获取提出元素的上一个元素,如果比提出元素大,则将这个元素往后移一位,依次类推
while (j >=0 && a[j] > key) {
a[j+1] = a[j];
j--;
}
/*通过上面的循环就得到一个空的位置,前面的做法就是先把本来的位置放空,
然后把当前的位置减一,那么放回去的时候就是将当前位置加一就得到放空的位置了*/
a[j+1] = key;
}
}
算法复杂度: