插入排序的原理:将数组看做已排序和未排序两个部分。在初始状态下,将数组第一个元素作为已排序部分,第二个元素与第一个元素比较,如果小于则交换个元素位置。第三个元素再继续与已排序部分两个元素一一比较,并插入相应位置。如此循环,直到最后一个元素。
实现代码:
public static void sort(int[] arr) {
for(int i = 1 ; i < arr.length;i++) {
for(int j = 0; j < i; j++) {
if (arr[i] < arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
代码分析:
当程序运行时,由于arr[0]已经作为已排序部分,未排序部分第一个元素即为i=1,以此开始进行排序计算。j从0开始,j的取值范围是已排序部分的长度,因为未排序部分的第一个元素要轮流与已排序部分元素进行比较,i的取值即为当前未排序部分第一个元素位置索引,也就是已排序部分的长度。当arr[i]<arr[j]时,交换两个元素位置,此时arr[i]值已经发生变化,j继续增加,arr[i]与arr[j]的比较则变成了移动已排序部分元素位置。
测试:
public static void main(String[] args) {
int length = 10;
int[] arr = new int[length];
Random random = new Random();
for (int i = 0; i < length; i++) {
arr[i] = random.nextInt(length);
}
sort(arr);
for(int i : arr) {
System.out.println(i);
}
}