1.直接插入排序的基本思想:
在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
2.直接插入排序的算法步骤:
假设给定一个无序数组,给定的无序数组如下
把数组的首元素5作为有序区,此时有序区只有这一个元素:
第一轮
让元素8与有序区的所有元素依次进行比较。
元素8>5,所以元素8与元素5无需进行重新排序。
此时有序区的元素增加到了两个。
第二轮
让元素6与有效区的所有元素依次进行比较。
元素6<8,将元素6与元素8进行交换。
元素6>5,元素6与元素5无需交换顺序。
此时有序区的元素增加到了三个。
第三轮
让元素3与有序区的所有元素依次进行比较。
元素3<8,将元素8与元素3交换顺序。
元素3<6,将元素6与元素3交换顺序。
元素3<5,将元素5与元素3交换顺序。
此时有序区的元素增到到四个:
依次进行了类推,插入排序一共进行(数组长度-1)轮,每一轮的插入排序的结果为:
3.插入排序的代码实现
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] arr = {5,8,6,3,9,2,1,7};
for (int i = 1; i < arr.length; i++) {
//arr[i] 当前元素 arr[i-1] 他前面的一个元素
//如果当前元素小于我前一个元素,那就交换位置
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
int t = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = t;
}
}
}
System.out.println(Arrays.toString(arr));
}
}