Skip to content

Commit eeb0aec

Browse files
authored
Merge pull request krahets#166 from L-Super/patch-1
Update bubble_sort.md
2 parents fd6e993 + 34ad07b commit eeb0aec

File tree

4 files changed

+121
-14
lines changed

4 files changed

+121
-14
lines changed

codes/c/chapter_sorting/bubble_sort.c

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/**
2+
* File: bubble_sort.c
3+
* Created Time: 2022-12-26
4+
* Author: Listening (https://github.com/L-Super)
5+
*/
6+
7+
#include "../include/include.h"
8+
9+
/* 冒泡排序 */
10+
void bubble_sort(int nums[], int size)
11+
{
12+
// 外循环:待排序元素数量为 n-1, n-2, ..., 1
13+
for (int i = 0; i < size - 1; i++)
14+
{
15+
// 内循环:冒泡操作
16+
for (int j = 0; j < size - 1 - i; j++)
17+
{
18+
if (nums[j] > nums[j + 1])
19+
{
20+
int temp = nums[j];
21+
nums[j] = nums[j + 1];
22+
nums[j + 1] = temp;
23+
}
24+
}
25+
}
26+
}
27+
28+
/* 冒泡排序(标志优化)*/
29+
void bubble_sort_with_flag(int nums[], int size)
30+
{
31+
// 外循环:待排序元素数量为 n-1, n-2, ..., 1
32+
for (int i = 0; i < size - 1; i++)
33+
{
34+
bool flag = false;
35+
// 内循环:冒泡操作
36+
for (int j = 0; j < size - 1 - i; j++)
37+
{
38+
if (nums[j] > nums[j + 1])
39+
{
40+
int temp = nums[j];
41+
nums[j] = nums[j + 1];
42+
nums[j + 1] = temp;
43+
flag = true;
44+
}
45+
}
46+
if (!flag)
47+
break;
48+
}
49+
}
50+
51+
52+
/* Driver Code */
53+
int main()
54+
{
55+
int nums[6] = {4, 1, 3, 1, 5, 2};
56+
printf("冒泡排序后:\n");
57+
bubble_sort(nums, 6);
58+
for (int i = 0; i < 6; i++)
59+
{
60+
printf("%d ", nums[i]);
61+
}
62+
63+
printf("优化版冒泡排序后:\n");
64+
bubble_sort_with_flag(nums, 6);
65+
for (int i = 0; i < 6; i++)
66+
{
67+
printf("%d ", nums[i]);
68+
}
69+
printf("\n");
70+
71+
return 0;
72+
}

codes/c/include/include.h

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#include <stdio.h>
2+
#include <stdbool.h>

codes/cpp/chapter_sorting/bubble_sort.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@ void bubbleSort(vector<int>& nums) {
1414
for (int j = 0; j < i; j++) {
1515
if (nums[j] > nums[j + 1]) {
1616
// 交换 nums[j] 与 nums[j + 1]
17-
int tmp = nums[j];
18-
nums[j] = nums[j + 1];
19-
nums[j + 1] = tmp;
17+
// 这里使用了 std::swap() 函数
18+
swap(nums[j], nums[j + 1]);
2019
}
2120
}
2221
}
@@ -31,9 +30,8 @@ void bubbleSortWithFlag(vector<int>& nums) {
3130
for (int j = 0; j < i; j++) {
3231
if (nums[j] > nums[j + 1]) {
3332
// 交换 nums[j] 与 nums[j + 1]
34-
int tmp = nums[j];
35-
nums[j] = nums[j + 1];
36-
nums[j + 1] = tmp;
33+
// 这里使用了 std::swap() 函数
34+
swap(nums[j], nums[j + 1]);
3735
flag = true; // 记录交换元素
3836
}
3937
}

docs/chapter_sorting/bubble_sort.md

+43-8
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,8 @@ comments: true
8585
for (int j = 0; j < i; j++) {
8686
if (nums[j] > nums[j + 1]) {
8787
// 交换 nums[j] 与 nums[j + 1]
88-
int tmp = nums[j];
89-
nums[j] = nums[j + 1];
90-
nums[j + 1] = tmp;
88+
// 这里使用了 std::swap() 函数
89+
swap(nums[j], nums[j + 1]);
9190
}
9291
}
9392
}
@@ -170,7 +169,24 @@ comments: true
170169
=== "C"
171170

172171
```c title="bubble_sort.c"
173-
172+
/* 冒泡排序 */
173+
void bubble_sort(int nums[], int size)
174+
{
175+
// 外循环:待排序元素数量为 n-1, n-2, ..., 1
176+
for (int i = 0; i < size - 1; i++)
177+
{
178+
// 内循环:冒泡操作
179+
for (int j = 0; j < size - 1 - i; j++)
180+
{
181+
if (nums[j] > nums[j + 1])
182+
{
183+
int temp = nums[j];
184+
nums[j] = nums[j + 1];
185+
nums[j + 1] = temp;
186+
}
187+
}
188+
}
189+
}
174190
```
175191

176192
=== "C#"
@@ -250,9 +266,8 @@ comments: true
250266
for (int j = 0; j < i; j++) {
251267
if (nums[j] > nums[j + 1]) {
252268
// 交换 nums[j] 与 nums[j + 1]
253-
int tmp = nums[j];
254-
nums[j] = nums[j + 1];
255-
nums[j + 1] = tmp;
269+
// 这里使用了 std::swap() 函数
270+
swap(nums[j], nums[j + 1]);
256271
flag = true; // 记录交换元素
257272
}
258273
}
@@ -352,7 +367,27 @@ comments: true
352367
=== "C"
353368

354369
```c title="bubble_sort.c"
355-
370+
/* 冒泡排序 */
371+
void bubble_sort(int nums[], int size)
372+
{
373+
// 外循环:待排序元素数量为 n-1, n-2, ..., 1
374+
for (int i = 0; i < size - 1; i++)
375+
{
376+
bool flag = false;
377+
// 内循环:冒泡操作
378+
for (int j = 0; j < size - 1 - i; j++)
379+
{
380+
if (nums[j] > nums[j + 1])
381+
{
382+
int temp = nums[j];
383+
nums[j] = nums[j + 1];
384+
nums[j + 1] = temp;
385+
flag = true;
386+
}
387+
}
388+
if(!flag) break;
389+
}
390+
}
356391
```
357392

358393
=== "C#"

0 commit comments

Comments
 (0)