插入排序
假如我们要对以下数组进行排序:
{3, 2, 1, 52, 67, 21, 5}
介绍第四种排序算法,插入排序。
核心思想:
- 我们将这个数组看成两部分,从Index 1作为分割线,左边是有序部分,右边是无序部分。
- 我们从Index 1,开始,将元素拿出来,然后逐个和左边的元素进行对比、排序。
- 例如上面的数组,我们将元素2拿出来,用一个temp变量记录,然后和左边Index 0的元素3对比,发现3比2大,就将3放入Index 1的位置,然后将temp中记录的元素2,再放入Index 0中。此时数组已经变成了{2, 3, 1, 52, 67, 21, 5}
- 根据第3条,我们再将元素1拿出来,和左边Index为1的元素3进行对比,发现3大于1,就将3换位到Index 2上,然后再和Index 0上的2进行对比,发现2大于1,就将元素2换位到Index 1上,最后将元素1放到Index 0上。
- 如此循环,就完成了插入排序。
代码示例:
package com.evan.insert_sort;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] array = {3, 1, 123, 52, 67, 21, 5};
System.out.println("排序前: " + Arrays.toString(array));
insertSort(array);
System.out.println("排序前: " + Arrays.toString(array));
}
public static void insertSort(int[] array) {
if(null == array || array.length == 0) {
return;
}
int i, j;
for (i = 1; i < array.length; i++) {
int temp = array[i];
for (j = i - 1; j >= 0; j--) {
if(array[j] < temp) {
break;
}
if(array[j] >= temp) {
array[j + 1] = array[j];
}
}
array[j + 1] = temp;
}
}
}