- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
什么是插入排序
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
时间,空间
时间:O(N^2)
空间:O(1)
代码实现
public static void insertSort(int[] arr) {
//如果为空或者小于2,则不需要排序 直接就是有序的
if (arr == null || arr.length < 2) {
return;
}
for (int i = 1; i < arr.length; i++) {
//用i位置的数跟i位置前面的数依次比较,到0停,如果小,交换,否则继续
for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
swap(arr, j, j + 1);
}
}
}
public static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
执行过程
是否稳定
稳定
- 1、已经有序的小序列的基础上,一次插入一个元素;
- 2、想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置;
- 3、如果碰见一个和插入元素相 等的,那么插入元素把想插入的元素放在相等元素的后面;
- 4、相等元素的前后顺序没有改变;