Skip to content

Commit 2292143

Browse files
committed
增加“排序”
1 parent 5f0926e commit 2292143

27 files changed

+159
-0
lines changed

docs/.asciidoctorconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
:sourcedir: {asciidoctorconfigdir}/../src/main/java/com/diguage/algo/leetcode
1414
:labdir: {asciidoctorconfigdir}/../src/test/java/com/diguage/labs
15+
:sortdir: {asciidoctorconfigdir}/../src/main/java/com/diguage/algo/sort
1516
:java_src_attr: source%nowrap,java,indent=0,linenums,subs="attributes,verbatim,quotes"
1617

1718
:doc_base_url: {asciidoctorconfigdir}/../docs

docs/0000-bubble-sort.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[#0000-bubble-sort]
2+
= 冒泡排序
3+
4+
image::images/bubble-sort-overview.png[{image_attr}]
5+

docs/0000-bucket-sort.adoc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[#0000-bucket-sort]
2+
= 桶排序
3+
4+
image::images/bucket-sort-overview.png[{image_attr}]
5+
6+

docs/0000-counting-sort.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[#0000-counting-sort]
2+
= 计数排序
3+
4+
5+
image::images/counting-sort-overview.png[{image_attr}]

docs/0000-heap-sort.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[#0000-heap-sort]
2+
= 堆排序
3+
4+
5+

docs/0000-insertion-sort.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[#0000-insertion-sort]
2+
= 插入排序
3+
4+
image::images/insertion-sort-overview.png[{image_attr}]
5+

docs/0000-merge-sort.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[#0000-merge-sort]
2+
= 归并排序
3+
4+
5+

docs/0000-quick-sort.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[#0000-quick-sort]
2+
= 快速排序
3+
4+
5+
image::images/quick-sort-overview.png[{image_attr}]

docs/0000-radix-sort.adoc

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
[#0000-radix-sort]
2+
= 基数排序
3+
4+
基数排序通过从低位到高位,对数字的每一位进行排序来获得排序结果。比较适合数量不多,但是每个数字之间相差很大的情况。而且时间复杂度是 stem:[O(nk)],`n` 表示数量, `k` 表示最大位数。
5+
6+
image::images/radix-sort-overview.png[{image_attr}]
7+
8+
[{java_src_attr}]
9+
----
10+
include::{sortdir}/RadixSort.java[tag=answer]
11+
----
12+
13+
14+
== 经典题目
15+
16+
xref:0164-maximum-gap.adoc[164. 最大间距]

docs/0000-selection-sort.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[#0000-selection-sort]
2+
= 选择排序
3+
4+
5+

docs/0000-shell-sort.adoc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[#0000-shell-sort]
2+
= 希尔排序
3+
4+
image::images/shell-sort-00.gif[{image_attr}]
5+
6+
TIP: 这个动图第一步很好!后面不好!
7+
8+
image::images/shell-sort-01.png[{image_attr}]
9+
10+
image::images/shell-sort-02.png[{image_attr}]
11+
12+
image::images/shell-sort-03.png[{image_attr}]
13+
14+
image::images/shell-sort-04.gif[{image_attr}]

docs/0000-sort.adoc

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
[#0000-sort]
2+
= 排序
3+
4+
include::0000-selection-sort.adoc[leveloffset=+1]
5+
6+
include::0000-bubble-sort.adoc[leveloffset=+1]
7+
8+
include::0000-insertion-sort.adoc[leveloffset=+1]
9+
10+
include::0000-quick-sort.adoc[leveloffset=+1]
11+
12+
include::0000-merge-sort.adoc[leveloffset=+1]
13+
14+
include::0000-shell-sort.adoc[leveloffset=+1]
15+
16+
include::0000-heap-sort.adoc[leveloffset=+1]
17+
18+
include::0000-bucket-sort.adoc[leveloffset=+1]
19+
20+
include::0000-counting-sort.adoc[leveloffset=+1]
21+
22+
include::0000-radix-sort.adoc[leveloffset=+1]
23+
24+
== 参考资料
25+
26+
. https://www.hello-algo.com/chapter_sorting/bubble_sort/[11.3   冒泡排序 - Hello 算法^]
27+
. https://www.hello-algo.com/chapter_sorting/insertion_sort/[11.4   插入排序 - Hello 算法^]
28+
. https://www.hello-algo.com/chapter_sorting/quick_sort/[11.5   快速排序 - Hello 算法^]
29+
. https://www.hello-algo.com/chapter_sorting/bucket_sort/[11.8 桶排序 - Hello 算法^]
30+
. https://www.hello-algo.com/chapter_sorting/counting_sort/[11.9 计数排序 - Hello 算法^]
31+
. https://www.hello-algo.com/chapter_sorting/radix_sort/[11.10 基数排序 - Hello 算法^]
32+
. https://zh.wikipedia.org/wiki/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F[希尔排序 - 维基百科^]
33+
. https://blog.csdn.net/m0_70103775/article/details/127894920[希尔排序(动图+详解)^]
34+
. https://www.cnblogs.com/the3times/p/12547787.html[希尔排序^]

docs/images/bubble-sort-overview.png

26.5 KB
Loading

docs/images/bucket-sort-overview.png

42.1 KB
Loading
29.8 KB
Loading
24.2 KB
Loading

docs/images/leetcode100.png

567 KB
Loading

docs/images/quick-sort-overview.png

25.6 KB
Loading

docs/images/radix-sort-overview.png

45.8 KB
Loading

docs/images/shell-sort-00.gif

1.91 MB
Loading

docs/images/shell-sort-01.png

35.6 KB
Loading

docs/images/shell-sort-02.png

35.2 KB
Loading

docs/images/shell-sort-03.png

32.3 KB
Loading

docs/images/shell-sort-04.gif

1.37 MB
Loading

docs/index.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ include::0000-data-structure-heap.adoc[leveloffset=+1]
2323

2424
include::0000-data-structure-graph.adoc[leveloffset=+1]
2525

26+
include::0000-sort.adoc[leveloffset=+1]
27+
2628
// Pattern
2729

2830
include::0000-00-recursion.adoc[leveloffset=+1]

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,7 @@
835835
<sourceDocumentName>index.adoc</sourceDocumentName>
836836
<attributes>
837837
<sourcedir>${project.build.sourceDirectory}/com/diguage/algo/leetcode</sourcedir>
838+
<sortdir>${project.build.sourceDirectory}/com/diguage/algo/sort</sortdir>
838839
<labdir>${project.build.testSourceDirectory}/com/diguage/labs</labdir>
839840
<basedir>${project.basedir}</basedir>
840841
<doctype>book</doctype>
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.diguage.algo.sort;
2+
3+
import java.util.Arrays;
4+
5+
public class RadixSort {
6+
// tag::answer[]
7+
/**
8+
* 基数排序
9+
*
10+
* @author D瓜哥 · https://www.diguage.com
11+
* @since 2025-06-29 15:45:01
12+
*/
13+
public void radixSort(int[] array) {
14+
if (null == array || array.length < 2) {
15+
return;
16+
}
17+
int max = Arrays.stream(array).max().orElse(0);
18+
int length = array.length;
19+
for (int exp = 1; exp < max; exp *= 10) {
20+
int[] counter = new int[10];
21+
for (int num : array) {
22+
// 获取指定位的值
23+
int digit = (num / exp) % 10;
24+
counter[digit]++;
25+
}
26+
// 将数量从小向大汇总,
27+
// 稍作处理即可映射出每个数字应该存储的坐标
28+
for (int i = 1; i < 10; i++) {
29+
counter[i] += counter[i - 1];
30+
}
31+
// 存储临时结果
32+
int[] temp = new int[length];
33+
for (int i = length - 1; i >= 0; i--) {
34+
int digit = (array[i] / exp) % 10;
35+
// counter[digit] 是一个数量统计,-1 是指向应该存储的坐标
36+
int index = counter[digit] - 1;
37+
temp[index] = array[i];
38+
counter[digit]--;
39+
}
40+
for (int i = 0; i < length; i++) {
41+
array[i] = temp[i];
42+
}
43+
}
44+
}
45+
46+
// end::answer[]
47+
public static void main(String[] args) {
48+
new RadixSort().radixSort(new int[]{3, 6, 9, 1});
49+
}
50+
}

0 commit comments

Comments
 (0)