commit
eeb0aec2f1
72
codes/c/chapter_sorting/bubble_sort.c
Normal file
72
codes/c/chapter_sorting/bubble_sort.c
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/**
|
||||||
|
* File: bubble_sort.c
|
||||||
|
* Created Time: 2022-12-26
|
||||||
|
* Author: Listening (https://github.com/L-Super)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../include/include.h"
|
||||||
|
|
||||||
|
/* 冒泡排序 */
|
||||||
|
void bubble_sort(int nums[], int size)
|
||||||
|
{
|
||||||
|
// 外循环:待排序元素数量为 n-1, n-2, ..., 1
|
||||||
|
for (int i = 0; i < size - 1; i++)
|
||||||
|
{
|
||||||
|
// 内循环:冒泡操作
|
||||||
|
for (int j = 0; j < size - 1 - i; j++)
|
||||||
|
{
|
||||||
|
if (nums[j] > nums[j + 1])
|
||||||
|
{
|
||||||
|
int temp = nums[j];
|
||||||
|
nums[j] = nums[j + 1];
|
||||||
|
nums[j + 1] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 冒泡排序(标志优化)*/
|
||||||
|
void bubble_sort_with_flag(int nums[], int size)
|
||||||
|
{
|
||||||
|
// 外循环:待排序元素数量为 n-1, n-2, ..., 1
|
||||||
|
for (int i = 0; i < size - 1; i++)
|
||||||
|
{
|
||||||
|
bool flag = false;
|
||||||
|
// 内循环:冒泡操作
|
||||||
|
for (int j = 0; j < size - 1 - i; j++)
|
||||||
|
{
|
||||||
|
if (nums[j] > nums[j + 1])
|
||||||
|
{
|
||||||
|
int temp = nums[j];
|
||||||
|
nums[j] = nums[j + 1];
|
||||||
|
nums[j + 1] = temp;
|
||||||
|
flag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!flag)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Driver Code */
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int nums[6] = {4, 1, 3, 1, 5, 2};
|
||||||
|
printf("冒泡排序后:\n");
|
||||||
|
bubble_sort(nums, 6);
|
||||||
|
for (int i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
printf("%d ", nums[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("优化版冒泡排序后:\n");
|
||||||
|
bubble_sort_with_flag(nums, 6);
|
||||||
|
for (int i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
printf("%d ", nums[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
2
codes/c/include/include.h
Normal file
2
codes/c/include/include.h
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdbool.h>
|
@ -14,9 +14,8 @@ void bubbleSort(vector<int>& nums) {
|
|||||||
for (int j = 0; j < i; j++) {
|
for (int j = 0; j < i; j++) {
|
||||||
if (nums[j] > nums[j + 1]) {
|
if (nums[j] > nums[j + 1]) {
|
||||||
// 交换 nums[j] 与 nums[j + 1]
|
// 交换 nums[j] 与 nums[j + 1]
|
||||||
int tmp = nums[j];
|
// 这里使用了 std::swap() 函数
|
||||||
nums[j] = nums[j + 1];
|
swap(nums[j], nums[j + 1]);
|
||||||
nums[j + 1] = tmp;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -31,9 +30,8 @@ void bubbleSortWithFlag(vector<int>& nums) {
|
|||||||
for (int j = 0; j < i; j++) {
|
for (int j = 0; j < i; j++) {
|
||||||
if (nums[j] > nums[j + 1]) {
|
if (nums[j] > nums[j + 1]) {
|
||||||
// 交换 nums[j] 与 nums[j + 1]
|
// 交换 nums[j] 与 nums[j + 1]
|
||||||
int tmp = nums[j];
|
// 这里使用了 std::swap() 函数
|
||||||
nums[j] = nums[j + 1];
|
swap(nums[j], nums[j + 1]);
|
||||||
nums[j + 1] = tmp;
|
|
||||||
flag = true; // 记录交换元素
|
flag = true; // 记录交换元素
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,9 +85,8 @@ comments: true
|
|||||||
for (int j = 0; j < i; j++) {
|
for (int j = 0; j < i; j++) {
|
||||||
if (nums[j] > nums[j + 1]) {
|
if (nums[j] > nums[j + 1]) {
|
||||||
// 交换 nums[j] 与 nums[j + 1]
|
// 交换 nums[j] 与 nums[j + 1]
|
||||||
int tmp = nums[j];
|
// 这里使用了 std::swap() 函数
|
||||||
nums[j] = nums[j + 1];
|
swap(nums[j], nums[j + 1]);
|
||||||
nums[j + 1] = tmp;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -170,7 +169,24 @@ comments: true
|
|||||||
=== "C"
|
=== "C"
|
||||||
|
|
||||||
```c title="bubble_sort.c"
|
```c title="bubble_sort.c"
|
||||||
|
/* 冒泡排序 */
|
||||||
|
void bubble_sort(int nums[], int size)
|
||||||
|
{
|
||||||
|
// 外循环:待排序元素数量为 n-1, n-2, ..., 1
|
||||||
|
for (int i = 0; i < size - 1; i++)
|
||||||
|
{
|
||||||
|
// 内循环:冒泡操作
|
||||||
|
for (int j = 0; j < size - 1 - i; j++)
|
||||||
|
{
|
||||||
|
if (nums[j] > nums[j + 1])
|
||||||
|
{
|
||||||
|
int temp = nums[j];
|
||||||
|
nums[j] = nums[j + 1];
|
||||||
|
nums[j + 1] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "C#"
|
=== "C#"
|
||||||
@ -250,9 +266,8 @@ comments: true
|
|||||||
for (int j = 0; j < i; j++) {
|
for (int j = 0; j < i; j++) {
|
||||||
if (nums[j] > nums[j + 1]) {
|
if (nums[j] > nums[j + 1]) {
|
||||||
// 交换 nums[j] 与 nums[j + 1]
|
// 交换 nums[j] 与 nums[j + 1]
|
||||||
int tmp = nums[j];
|
// 这里使用了 std::swap() 函数
|
||||||
nums[j] = nums[j + 1];
|
swap(nums[j], nums[j + 1]);
|
||||||
nums[j + 1] = tmp;
|
|
||||||
flag = true; // 记录交换元素
|
flag = true; // 记录交换元素
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -352,7 +367,27 @@ comments: true
|
|||||||
=== "C"
|
=== "C"
|
||||||
|
|
||||||
```c title="bubble_sort.c"
|
```c title="bubble_sort.c"
|
||||||
|
/* 冒泡排序 */
|
||||||
|
void bubble_sort(int nums[], int size)
|
||||||
|
{
|
||||||
|
// 外循环:待排序元素数量为 n-1, n-2, ..., 1
|
||||||
|
for (int i = 0; i < size - 1; i++)
|
||||||
|
{
|
||||||
|
bool flag = false;
|
||||||
|
// 内循环:冒泡操作
|
||||||
|
for (int j = 0; j < size - 1 - i; j++)
|
||||||
|
{
|
||||||
|
if (nums[j] > nums[j + 1])
|
||||||
|
{
|
||||||
|
int temp = nums[j];
|
||||||
|
nums[j] = nums[j + 1];
|
||||||
|
nums[j + 1] = temp;
|
||||||
|
flag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!flag) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "C#"
|
=== "C#"
|
||||||
|
Loading…
Reference in New Issue
Block a user