Skip to content

Commit cfee2ae

Browse files
committed
feat: method name specification
1 parent a3cc49b commit cfee2ae

File tree

13 files changed

+263
-292
lines changed

13 files changed

+263
-292
lines changed

BubbleSort/README.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@
1717

1818
#### C语言
1919
```c
20-
void bubble_sort(int arr[], int len) {
20+
void bubble_sort(int arr[], int n) {
2121
int i, j, tmp;
22-
for (i = 0; i < len - 1; i++) {
23-
for (j = 0; j < len - i - 1; j++) {
24-
if (arr[j] > arr[j + 1]) {
25-
tmp = arr[j];
26-
arr[j] = arr[j + 1];
27-
arr[j + 1] = tmp;
22+
for (i = 0; i < n - 1; i++) {
23+
for (j = 0; j < n - i - 1; j++) {
24+
if (arr[j] > arr[j + 1]) {
25+
tmp = arr[j];
26+
arr[j] = arr[j + 1];
27+
arr[j + 1] = tmp;
2828
}
29-
}
30-
}
29+
}
30+
}
3131
}
3232
```
3333
### 算法分析
@@ -39,19 +39,19 @@ void bubble_sort(int arr[], int len) {
3939
我们可以用一个 `flag` 参数记录新一轮的排序中元素是否做过交换,如果没有,说明前面参与比较过的元素已经是正序,那就没必要再从头比较了。代码实现如下:
4040
4141
```c
42-
void bubble_sort_quicker(int arr[], int len) {
42+
void bubble_sort_quicker(int arr[], int n) {
4343
int i, j, tmp, flag;
44-
for (i = 0; i < len - 1; i++) {
44+
for (i = 0; i < n - 1; i++) {
4545
flag = 0;
46-
for (j = 0; j < len - i - 1; j++) {
47-
if (arr[j] > arr[j + 1]) {
48-
tmp = arr[j];
49-
arr[j] = arr[j + 1];
50-
arr[j + 1] = tmp;
51-
flag = 1;
46+
for (j = 0; j < n - i - 1; j++) {
47+
if (arr[j] > arr[j + 1]) {
48+
tmp = arr[j];
49+
arr[j] = arr[j + 1];
50+
arr[j + 1] = tmp;
51+
flag = 1;
5252
}
5353
}
5454
if (!flag) return;
55-
}
55+
}
5656
}
5757
```

BubbleSort/bubble_sort.c

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,41 @@
11
#include <stdio.h>
22

3-
void BubbleSort(int arr[], int len) {
3+
void bubble_sort(int arr[], int n) {
44
int i, j, tmp;
5-
for (i = 0; i < len - 1; i++) {
6-
for (j = 0; j < len - i - 1; j++) {
7-
if (arr[j] > arr[j + 1]) {
8-
tmp = arr[j];
9-
arr[j] = arr[j + 1];
10-
arr[j + 1] = tmp;
5+
for (i = 0; i < n - 1; i++) {
6+
for (j = 0; j < n - i - 1; j++) {
7+
if (arr[j] > arr[j + 1]) {
8+
tmp = arr[j];
9+
arr[j] = arr[j + 1];
10+
arr[j + 1] = tmp;
1111
}
12-
}
13-
}
12+
}
13+
}
1414
}
1515

16-
void BubbleSortQuicker(int arr[], int len) {
16+
void bubble_sort_quicker(int arr[], int n) {
1717
int i, j, tmp, flag;
18-
for (i = 0; i < len - 1; i++) {
18+
for (i = 0; i < n - 1; i++) {
1919
flag = 0;
20-
for (j = 0; j < len - i - 1; j++) {
21-
if (arr[j] > arr[j + 1]) {
22-
tmp = arr[j];
23-
arr[j] = arr[j + 1];
24-
arr[j + 1] = tmp;
25-
flag = 1;
20+
for (j = 0; j < n - i - 1; j++) {
21+
if (arr[j] > arr[j + 1]) {
22+
tmp = arr[j];
23+
arr[j] = arr[j + 1];
24+
arr[j + 1] = tmp;
25+
flag = 1;
2626
}
2727
}
2828
if (!flag) return;
29-
}
29+
}
3030
}
3131

32-
3332
int main() {
3433
int arr[] = { 7, 2, 5, 3, 8};
35-
int len = sizeof(arr) / sizeof(*arr);
36-
BubbleSort(arr, len);
37-
// BubbleSortQuicker(arr, len);
34+
int n = sizeof(arr) / sizeof(*arr);
35+
bubble_sort(arr, n);
36+
// bubble_sort_quicker(arr, n);
3837
printf("Sort result:\n");
39-
for (int i = 0; i < len; i++)
38+
for (int i = 0; i < n; i++)
4039
printf("%d ", arr[i]);
4140
return 0;
4241
}

HeapSort/README.md

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515

1616
以升序为例,算法实现的思路为:
1717

18-
1. 建立一个 BuildHeap 函数,将数组 tree[0,...n-1] 建立成堆,n 表示数组长度。函数里需要维护的是所有节点的父节点,最后一个子节点下标为 n-1,那么它对应的父节点下标就是(n-1-1)/2。
18+
1. 建立一个 build_heap 函数,将数组 tree[0,...n-1] 建立成堆,n 表示数组长度。函数里需要维护的是所有节点的父节点,最后一个子节点下标为 n-1,那么它对应的父节点下标就是(n-1-1)/2。
1919
2. 构建完一次堆后,最大元素就会被存放在根节点 tree[0]。将 tree[0] 与最后一个元素交换,每一轮通过这种不断将最大元素后移的方式,来实现排序。
20-
3. 而交换后新的根节点可能不满足堆的特点了,因此需要一个调整函数 Heapify 来对剩余的数组元素进行最大堆性质的维护。如果 tree[i] 表示其中的某个节点,那么 tree[2\*i+1] 是左孩子,tree[2\*i+2] 是右孩子,选出三者中的最大元素的下标,存放于 max 值中,若 max 不等于 i,则将最大元素交换到 i 下标的位置。但是,此时以 tree[max] 为根节点的子树可能不满足堆的性质,需要递归调用自身。
20+
3. 而交换后新的根节点可能不满足堆的特点了,因此需要一个调整函数 heapify 来对剩余的数组元素进行最大堆性质的维护。如果 tree[i] 表示其中的某个节点,那么 tree[2\*i+1] 是左孩子,tree[2\*i+2] 是右孩子,选出三者中的最大元素的下标,存放于 max 值中,若 max 不等于 i,则将最大元素交换到 i 下标的位置。但是,此时以 tree[max] 为根节点的子树可能不满足堆的性质,需要递归调用自身。
2121

2222
### 动图演示
2323

@@ -28,46 +28,46 @@
2828
#### C语言
2929

3030
```c
31-
void Heapify(int tree[], int n, int i) {
32-
// n 表示序列长度,i 表示父节点下标
33-
if (i >= n) return;
34-
// 左侧子节点下标
35-
int left = 2 * i + 1;
36-
// 右侧子节点下标
37-
int right = 2 * i + 2;
38-
int max = i;
39-
if (left < n && tree[left] > tree[max]){
40-
max = left;
41-
}
42-
if (right < n && tree[right] > tree[max]){
43-
max = right;
44-
}
45-
if (max != i) {
46-
swap(tree, max, i);
47-
Heapify(tree, n, max);
48-
}
31+
void heapify(int tree[], int n, int i) {
32+
// n 表示序列长度,i 表示父节点下标
33+
if (i >= n) return;
34+
// 左侧子节点下标
35+
int left = 2 * i + 1;
36+
// 右侧子节点下标
37+
int right = 2 * i + 2;
38+
int max = i;
39+
if (left < n && tree[left] > tree[max]){
40+
max = left;
41+
}
42+
if (right < n && tree[right] > tree[max]){
43+
max = right;
44+
}
45+
if (max != i) {
46+
swap(tree, max, i);
47+
heapify(tree, n, max);
48+
}
4949
}
5050

51-
void BuildHeap(int tree[], int n) {
52-
// 树最后一个节点的下标
53-
int last_node = n - 1;
54-
// 最后一个节点对应的父节点下标
55-
int parent = (last_node - 1) / 2;
56-
int i;
57-
for (i = parent; i >= 0; i--) {
58-
Heapify(tree, n, i);
59-
}
51+
void build_heap(int tree[], int n) {
52+
// 树最后一个节点的下标
53+
int last_node = n - 1;
54+
// 最后一个节点对应的父节点下标
55+
int parent = (last_node - 1) / 2;
56+
int i;
57+
for (i = parent; i >= 0; i--) {
58+
heapify(tree, n, i);
59+
}
6060
}
6161

62-
void HeapSort(int tree[], int n) {
63-
BuildHeap(tree, n);
64-
int i;
65-
for (i = n - 1; i >= 0; i--) {
66-
// 将堆顶元素与最后一个元素交换
67-
swap(tree, i, 0);
68-
// 调整成大顶堆
69-
Heapify(tree, i, 0);
70-
}
62+
void heap_sort(int tree[], int n) {
63+
build_heap(tree, n);
64+
int i;
65+
for (i = n - 1; i >= 0; i--) {
66+
// 将堆顶元素与最后一个元素交换
67+
swap(tree, i, 0);
68+
// 调整成大顶堆
69+
heapify(tree, i, 0);
70+
}
7171
}
7272
```
7373

HeapSort/heap_sort.c

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,57 @@
11
#include <stdio.h>
22

33
void swap(int arr[], int i, int j) {
4-
int temp = arr[i];
5-
arr[i] = arr[j];
6-
arr[j] = temp;
4+
int temp = arr[i];
5+
arr[i] = arr[j];
6+
arr[j] = temp;
77
}
88

9-
void Heapify(int tree[], int n, int i) {
10-
// n 表示序列长度,i 表示父节点下标
11-
if (i >= n) return;
12-
// 左侧子节点下标
13-
int left = 2 * i + 1;
14-
// 右侧子节点下标
15-
int right = 2 * i + 2;
16-
int max = i;
17-
if (left < n && tree[left] > tree[max]){
18-
max = left;
19-
}
20-
if (right < n && tree[right] > tree[max]){
21-
max = right;
22-
}
23-
if (max != i) {
24-
swap(tree, max, i);
25-
Heapify(tree, n, max);
26-
}
9+
void heapify(int tree[], int n, int i) {
10+
// n 表示序列长度,i 表示父节点下标
11+
if (i >= n) return;
12+
// 左侧子节点下标
13+
int left = 2 * i + 1;
14+
// 右侧子节点下标
15+
int right = 2 * i + 2;
16+
int max = i;
17+
if (left < n && tree[left] > tree[max]){
18+
max = left;
19+
}
20+
if (right < n && tree[right] > tree[max]){
21+
max = right;
22+
}
23+
if (max != i) {
24+
swap(tree, max, i);
25+
heapify(tree, n, max);
26+
}
2727
}
2828

29-
void BuildHeap(int tree[], int n) {
30-
// 树最后一个节点的下标
31-
int last_node = n - 1;
32-
// 最后一个节点对应的父节点下标
33-
int parent = (last_node - 1) / 2;
34-
int i;
35-
for (i = parent; i >= 0; i--) {
36-
Heapify(tree, n, i);
37-
}
29+
void build_heap(int tree[], int n) {
30+
// 树最后一个节点的下标
31+
int last_node = n - 1;
32+
// 最后一个节点对应的父节点下标
33+
int parent = (last_node - 1) / 2;
34+
int i;
35+
for (i = parent; i >= 0; i--) {
36+
heapify(tree, n, i);
37+
}
3838
}
3939

40-
void HeapSort(int tree[], int n) {
41-
BuildHeap(tree, n);
42-
int i;
43-
for (i = n - 1; i >= 0; i--) {
44-
// 将堆顶元素与最后一个元素交换
45-
swap(tree, i, 0);
46-
// 调整成大顶堆
47-
Heapify(tree, i, 0);
48-
}
40+
void heap_sort(int tree[], int n) {
41+
build_heap(tree, n);
42+
int i;
43+
for (i = n - 1; i >= 0; i--) {
44+
// 将堆顶元素与最后一个元素交换
45+
swap(tree, i, 0);
46+
// 调整成大顶堆
47+
heapify(tree, i, 0);
48+
}
4949
}
5050

5151
int main() {
5252
int arr[] = {5, 2, 7, 3, 6, 1, 4};
5353
int n = sizeof(arr) / sizeof(*arr);
54-
HeapSort(arr, n);
54+
heap_sort(arr, n);
5555
printf("Sort result:\n");
5656
for (int i = 0; i < n; i++)
5757
printf("%d ", arr[i]);

InsertionSort/README.md

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)