Skip to content

Commit 858adad

Browse files
Merge pull request #69 from chinalwb/master
Another 2 sorting implementation, bubble down (I named it..) and shell sort.
2 parents 6f5d763 + e6acab7 commit 858adad

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

java/11_sorts/SortsAddOn.java

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package sorts;
2+
3+
/**
4+
* 向下冒泡算法 (或许比冒泡更易懂的排序算法?)
5+
* 希尔排序
6+
*
7+
* Author: wliu
8+
*/
9+
public class SortsAddOn {
10+
11+
public static void main(String[] args) {
12+
int[] arr = {3, 2, 6, 4, 5, 1, 9, 20, 13, 16};
13+
// bubbleDownSort(arr);
14+
shellSort(arr);
15+
print(arr);
16+
}
17+
18+
/**
19+
* 向下冒泡。可能比冒泡更易懂?
20+
*
21+
* 算法概要:
22+
* 从0开始,用这个元素去跟后面的所有元素比较,如果发现这个元素大于后面的某个元素,则交换。
23+
* 3 2 6 4 5 1
24+
* 第一趟是从 index=0 也就是 3, 开始跟index=1及其后面的数字比较
25+
* 3 大于 2,交换,变为 2 3 6 4 5 1,此时index=0的位置变为了2
26+
* 接下来将用2跟index=2比较
27+
* 2 不大于 6 不交换
28+
* 2 不大于 4 不交换
29+
* 2 不大于 5 不交换
30+
* 2 大于 1,交换,变为 1 3 6 4 5 2,第一趟排序完成。
31+
*
32+
* 第二趟是从 index=1 也就是 3,开始跟index=2及其后面的数字比较
33+
* 3 不大于 6 不交换
34+
* 3 不大于 4 不交换
35+
* 3 不大于 5 不交换
36+
* 3 大于 2,交换,变为 1 2 6 4 5 3,第二趟排序完成。
37+
*
38+
* 第三趟是从 index=2 也就是 6,开始跟index=3及其后面的数字比较
39+
* 6 大于 4,交换,变为 1 2 4 6 5 3, 此时 index = 2 的位置变为了4
40+
* 接下来将用4跟index=4比较
41+
* 4 不大于 5 不交换
42+
* 4 大于 3,交换,变为 1 2 3 6 5 4,第三趟排序完成。
43+
*
44+
* 第四趟是从 index=3 也就是 6,开始跟index=4及其后面的数字比较
45+
* 6 大于 5,交换,变为 1 2 3 5 6 4, 此时 index = 3 的位置变为了5
46+
* 接下来将用5跟index=5比较
47+
* 5 大于 4,交换,变为 1 2 3 4 6 5, 第四趟排序完成。
48+
*
49+
* 第五趟是从 index=4 也就是 6,开始跟index=5及其后面的数字比较
50+
* 6 大于 5,交换,变为 1 2 3 4 5 6, 此时 index = 4 的位置变为了5
51+
* 接下来将用5跟index=6比较
52+
* index = 6 已经不满足 index < length 的条件,整个排序完成。
53+
*/
54+
private static void bubbleDownSort(int[] arr) {
55+
int len = arr.length;
56+
if (len == 1) return;
57+
58+
for (int i = 0; i < len; i++) {
59+
for (int j = i + 1; j < len; j++) {
60+
if (arr[i] > arr[j]) {
61+
int tmp = arr[i];
62+
arr[i] = arr[j];
63+
arr[j] = tmp;
64+
}
65+
}
66+
}
67+
}
68+
69+
70+
private static void shellSort(int[] arr) {
71+
int len = arr.length;
72+
if (len == 1) return;
73+
74+
int step = len / 2;
75+
while (step >= 1) {
76+
for (int i = step; i < len; i++) {
77+
int value = arr[i];
78+
int j = i - step;
79+
for (; j >= 0; j -= step) {
80+
if (value < arr[j]) {
81+
arr[j+step] = arr[j];
82+
} else {
83+
break;
84+
}
85+
}
86+
arr[j+step] = value;
87+
}
88+
89+
step = step / 2;
90+
}
91+
}
92+
93+
private static void print(int[] arr) {
94+
System.out.println("Print array:");
95+
for (int x : arr) {
96+
System.out.print(x + "\t");
97+
}
98+
System.out.println("");
99+
}
100+
}

0 commit comments

Comments
 (0)