Skip to content

Commit af09b91

Browse files
committed
修改插入排序错误
1 parent 1736dd8 commit af09b91

File tree

2 files changed

+21
-11
lines changed
  • 「一入 Java 深似海 」/代码/segmentfault/deep-in-java/stage-2/lesson-4/src/main/java/com/segmentfault/deep/in/java/collection/algorithm

2 files changed

+21
-11
lines changed

「一入 Java 深似海 」/代码/segmentfault/deep-in-java/stage-2/lesson-4/src/main/java/com/segmentfault/deep/in/java/collection/algorithm/BubbleSort.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ public static void main(String[] args) {
3939
Integer[] values = Sort.of(3, 1, 2, 5, 4);
4040
Sort<Integer> sort = new BubbleSort<>(); // Java 7 Diamond 语法
4141
sort.sort(values);
42-
System.out.printf("排序结果:%s", Arrays.toString(values));
42+
System.out.printf("排序结果:%s\n", Arrays.toString(values));
4343

4444
System.out.println("完全逆序");
4545
values = Sort.of(5, 4, 3, 2, 1);
4646
sort = new BubbleSort<>();
4747
sort.sort(values);
48-
System.out.printf("排序结果:%s", Arrays.toString(values));
48+
System.out.printf("排序结果:%s\n", Arrays.toString(values));
4949
}
5050

5151
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.segmentfault.deep.in.java.collection.algorithm;
22

3-
import java.util.stream.Stream;
3+
import java.util.Arrays;
44

55
public class InsertionSort<T extends Comparable<T>> implements Sort<T> {
66

@@ -17,20 +17,30 @@ public void sort(T[] values) {
1717
// [j = 0] = 3, [i = 1] = 1 , t = [i = 1] = 1
1818
// [i = 1] = [j = 0] , [j = 0] = t = 1
1919
T t = values[i]; // 产生临时变量
20-
for (int j = i - 1; j >= 0; j--) {
21-
if (t.compareTo(values[j]) < 1) { // 高位 < 低位
22-
values[i] = values[j]; // 高位获取低位的值
23-
values[j] = t; // 低位得到高位的值
24-
}
20+
int j = i;
21+
while (j > 0 && t.compareTo(values[j - 1]) < 0) {
22+
//往后移动让出插入空间
23+
values[j] = values[j - 1];
24+
j--;
2525
}
26+
//插入values[i]到对应位置
27+
values[j] = t;
28+
System.out.printf("第%d轮:%s\n", i, Arrays.toString(values));
2629
}
2730
}
2831

2932
public static void main(String[] args) {
30-
Integer[] values = Sort.of(3, 1, 2, 5, 4);
31-
Sort<Integer> sort = new InsertionSort<>(); // Java 7 Diamond 语法
33+
System.out.println("一般情况");
34+
Integer[] values = Sort.of(3, 2, 1, 5, 4);
35+
Sort<Integer> sort = new InsertionSort<>();
3236
sort.sort(values);
33-
Stream.of(values).forEach(System.out::println);
37+
System.out.println(Arrays.toString(values));
38+
39+
System.out.println("完全逆序");
40+
values = Sort.of(5, 4, 3, 2, 1);
41+
sort = new InsertionSort<>();
42+
sort.sort(values);
43+
System.out.println(Arrays.toString(values));
3444
}
3545

3646
}

0 commit comments

Comments
 (0)