Skip to content

Commit 702f7ed

Browse files
committed
完成912
1 parent 68e1c83 commit 702f7ed

15 files changed

+82
-10
lines changed

README.adoc

+8-8
Original file line numberDiff line numberDiff line change
@@ -6402,14 +6402,14 @@ TIP: **公众号的微信号是: `jikerizhi`**。__因为众所周知的原因
64026402
//|{doc_base_url}/0911-online-election.adoc[题解]
64036403
//|Medium
64046404
//|
6405-
//
6406-
//|{counter:codes}
6407-
//|{leetcode_base_url}/sort-an-array/[912. Sort an Array]
6408-
//|{source_base_url}/_0912_SortAnArray.java[Java]
6409-
//|{doc_base_url}/0912-sort-an-array.adoc[题解]
6410-
//|Medium
6411-
//|
6412-
//
6405+
6406+
|{counter:codes}
6407+
|{leetcode_base_url}/sort-an-array/[912. Sort an Array]
6408+
|{source_base_url}/_0912_SortAnArray.java[Java]
6409+
|{doc_base_url}/0912-sort-an-array.adoc[题解]
6410+
|Medium
6411+
|归并,快排
6412+
64136413
//|{counter:codes}
64146414
//|{leetcode_base_url}/cat-and-mouse/[913. Cat and Mouse]
64156415
//|{source_base_url}/_0913_CatAndMouse.java[Java]

docs/0000-00-note.adoc

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
. 树的 Morris 遍历
1313
.. TODO: 基于 Morris 遍历的中序排列已经掌握,前序,尤其是后续还需要加强。
1414

15-
image::images/quicksort.gif[{image_attr}]
15+
image::images/quick-sort-01.gif[{image_attr}]
1616

1717
== 未知
1818

docs/0912-sort-an-array.adoc

+20-1
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,31 @@ Given an array of integers `nums`, sort the array in ascending order.
2828
* `1 <= nums.length <= 50000`
2929
* `-50000 <= nums[i] <= 50000`
3030

31+
== 思路分析
3132

33+
归并排序
3234

35+
image::images/merge-sort-02.gif[{image_attr}]
36+
37+
image::images/merge-sort-01.gif[{image_attr}]
38+
39+
image::images/meger-sort-03.png[{image_attr}]
40+
41+
image::images/quick-sort-01.gif[{image_attr}]
42+
43+
image::images/quick-sort-02.gif[{image_attr}]
44+
45+
image::images/quick-sort-03.png[{image_attr}]
3346

3447
[[src-0912]]
3548
[{java_src_attr}]
3649
----
37-
include::{sourcedir}/_0912_SortAnArray.java[]
50+
include::{sourcedir}/_0912_SortAnArray.java[tag=answer]
3851
----
3952

53+
== 参考资料
54+
55+
. https://leetcode.cn/problems/sort-an-array/solutions/178305/pai-xu-shu-zu-by-leetcode-solution/[912. 排序数组 - 官方题解^]
56+
. https://leetcode.cn/problems/sort-an-array/solutions/179489/fu-xi-ji-chu-pai-xu-suan-fa-java-by-liweiwei1419/[912. 排序数组 - 复习基础排序算法^]
57+
. https://leetcode.cn/problems/sort-an-array/solutions/1311934/duo-chong-pai-xu-yi-wang-da-jin-kuai-pai-wgz4/[912. 排序数组 - 『 3种排序一网打尽 』 快速排序、归并排序、堆排序详解^]
58+

docs/images/bubble-sort-02.gif

787 KB
Loading

docs/images/insertion-sort-02.gif

916 KB
Loading

docs/images/meger-sort-03.png

468 KB
Loading

docs/images/merge-sort-01.gif

1.59 MB
Loading

docs/images/merge-sort-02.gif

245 KB
Loading

docs/images/merge-sort-03.gif

805 KB
Loading
File renamed without changes.

docs/images/quick-sort-02.gif

609 KB
Loading

docs/images/quick-sort-03.png

517 KB
Loading

docs/images/selection-sort-02.gif

1.08 MB
Loading

logbook/202406.adoc

+5
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,11 @@
272272
|{doc_base_url}/0114-flatten-binary-tree-to-linked-list.adoc[题解]
273273
|遍历+递归,两套解决方案
274274

275+
|{counter:codes}
276+
|{leetcode_base_url}/sort-an-array/[912. Sort an Array]
277+
|{doc_base_url}/0912-sort-an-array.adoc[题解]
278+
|归并,快排都可以
279+
275280
|===
276281

277282
截止目前,本轮练习一共完成 {codes} 道题。
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.diguage.algorithm.leetcode;
2+
3+
public class _0912_SortAnArray {
4+
// tag::answer[]
5+
/**
6+
* 归并排序
7+
*
8+
* @author D瓜哥 · https://www.diguage.com
9+
* @since 2024-07-06 17:47:27
10+
*/
11+
public int[] sortArray(int[] nums) {
12+
mergeSort(nums, 0, nums.length - 1);
13+
return nums;
14+
}
15+
16+
private void mergeSort(int[] nums, int left, int right) {
17+
if (right == left) {
18+
return;
19+
}
20+
int mid = left + (right - left) / 2;
21+
mergeSort(nums, left, mid);
22+
mergeSort(nums, mid + 1, right);
23+
merge(nums, left, mid, right);
24+
}
25+
26+
private void merge(int[] nums, int left, int mid, int right) {
27+
int[] temp = new int[right - left + 1];
28+
int l = left, r = mid + 1;
29+
int i = 0;
30+
while (l <= mid && r <= right) {
31+
if (nums[l] <= nums[r]) {
32+
temp[i++] = nums[l++];
33+
} else {
34+
temp[i++] = nums[r++];
35+
}
36+
}
37+
while (l <= mid) {
38+
temp[i++] = nums[l++];
39+
}
40+
while (r <= right) {
41+
temp[i++] = nums[r++];
42+
}
43+
for (int j = left; j <= right; j++) {
44+
nums[j] = temp[j - left];
45+
}
46+
}
47+
// end::answer[]
48+
}

0 commit comments

Comments
 (0)