插入排序的基本思想:
每次将一个待排序的元素,按其关键字的大小插入到前面已经排好序的子文件的适当位置,直到全部记录插入插入完成为止。
直接插入排序的思想:
把n个待排序的元素看成是一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,排序过程中,每次从无序表取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使其成为新的有序表。
/** 直接插入排序
* @author xiaocui
* @date 2022年08月05日 17:58
*/
public class InsertSort {
private static void insertSort(int[] arr) {
for (int i = 0; i < arr.length-1; ++i) {
//记录有序序列最后一个元素的下标
int end = i;
//待插入的元素
int term = arr[end+1];
//单趟排
while (end >= 0){
//比插入的数大就向后移
if (term < arr[end]){
arr[end+1]=arr[end];
end--;
}else //比插入的数小,跳出循环
break;
}
//tem放到比插入的数小的数的后面
arr[end+1]=term;//把当前遍历元素放入到合适的位置上
//代码执行到此位置有两种情况:
//1.待插入元素找到应插入位置(break跳出循环到此)
//2.待插入元素比当前有序序列中的所有元素都小(while循环结束后到此)
}
}
public static void main(String[] args) {
int[] arr = {17,3,25,14,20,9};
insertSort(arr);
for (int i:arr) {
System.out.print(i + " ");
}
}
}
结果: