package com.shuji.test;
//直接插入排序
public class InsertSortTest1 {
private int array[] = { 11, 25, 14, 26, 2, 56, 22, 1 };
int temp1;
public static void main(String args[]) {
InsertSortTest1 inTest1 = new InsertSortTest1();
inTest1.method();
}
public void method() {
for (int i = 1; i < array.length; i++) {
if (array[i] < array[i - 1]) {
int temp = array[i];
int k = 0;
for (k = i - 1; (k >= 0) && temp < array[k]; k--) {
//满足循环条件时,只移动一次!
array[k + 1] = array[k];
}
// 注意,在这的结果是k--
array[k + 1] = temp;
}
System.out.println("i==" + i);
for (int j = 0; j < array.length; j++) {
System.out.println(array[j]);
}
}
}
}
对于 for (k = i - 1; (k >= 0) && temp < array[k]; k--) {
//满足循环条件时,只移动一次!
array[k + 1] = array[k];
}
用现在要比较的元素temp,与它之前的元素比较,从i-1开始,而不是从0开始,如果满足条件(temp < array[k]),就把array[k]这个元素往后移一次,(由于前面已经判断过array[i] < array[i - 1]) ),故至少会移动一次,如果再往前依次比较,还有满足条件(temp < array[k])的,再移动一次,这样,每次判断至多移动一次,如果判断不满足条件(temp < array[k]),就不会再向前进行循环判断了!!!
运行结果如下:
i==1
11
25
14
26
2
56
22
1
i==2
11
14
25
26
2
56
22
1
i==3
11
14
25
26
2
56
22
1
i==4
2
11
14
25
26
56
22
1
i==5
2
11
14
25
26
56
22
1
i==6
2
11
14
22
25
26
56
1
i==7
1
2
11
14
22
25
26
56
浙公网安备 33010602011771号