/**
* @author kyle
* @version 1.0 2018年11月29日 NEW
* @function
*/
public class InsertTest {
// 插入排序的思想是假设要插入元素之前数组已经是有序的,默认把第0个下标当成有序。
public static void sort(int[] numbers) {
// 因为假设第0个元素已经有序,所以遍历要从第一个元素开始,之后和前面的j[0]做对比。
for (int i = 1; i < numbers.length; i++) {
System.out.println("i = "+ i);
int currentNumber = numbers[i]; // 获取当前i的值
int j = i - 1; // j是获取前面已经有序的元素,第一次获取的是j[0], 把j[0]想成已经有序
System.out.println("j: "+ j);
while (j >= 0 && numbers[j] > currentNumber) { // 从小到大排序,如果前面的有序元素 下标[j]大于当前i的元素值,就交换, 一个一个的向右移位
System.out.println("while...");
System.out.println("j["+(j+1)+"] = "+ numbers[j]);
numbers[j + 1] = numbers[j]; // 一个一个的向右移位
j--;
}
System.out.println("j: " + j);
System.out.println("j["+(j+1)+"] = "+ currentNumber);
numbers[j + 1] = currentNumber;
// 如果没有移位j+1就相当于i,就是把i下标对应的元素还原到数组中。
// 如果有移位,[j+1],就是j中要与当前i交换的下标位置。因为如果有交换在循环里面执行了j--,后面的[j+1]只是把上面减掉的下标再加回来。
System.out.println("------------------------------------------");
}
}
public static void main(String[] args) {
int a[] ={1,4,5,3};
sort(a);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+ " ");
}
}
}
插入排序
最新推荐文章于 2025-07-13 21:05:47 发布