按是否可一次在内存中排序完成,排序可分为两种:
内部排序:数据记录在内存中进行一次排序。
外部排序:因排序的数据量很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。
public class StraightInsertionSort {
public static void insertSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
for (int i = 1; i < arr.length; i++) {
int temp = arr[i];
int indx = 0;
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
arr[j] = arr[j - 1];
indx = j - 1;
} else {
// 接下来是无用功
break;
}
arr[indx] = temp;
}
System.out.println("第"+i+"次排序后:"+Arrays.toString(arr));// 打印每趟排序的结果
}
return;
}
public static void main(String[] args) {
int[] arr = new int[] { 3, 1, 5, 7, 2, 4, 9, 6 };
insertSort(arr);
System.out.println();
System.out.println("最后结果:"+Arrays.toString(arr));// 打印每趟排序的结果
}
}
排序结果:
第1次排序后:[1, 3, 5, 7, 2, 4, 9, 6]
第2次排序后:[1, 3, 5, 7, 2, 4, 9, 6]
第3次排序后:[1, 3, 5, 7, 2, 4, 9, 6]
第4次排序后:[1, 2, 3, 5, 7, 4, 9, 6]
第5次排序后:[1, 2, 3, 4, 5, 7, 9, 6]
第6次排序后:[1, 2, 3, 4, 5, 7, 9, 6]
第7次排序后:[1, 2, 3, 4, 5, 6, 7, 9]
最后结果:[1, 2, 3, 4, 5, 6, 7, 9]
未完,待续…