【C语言】使用冒泡法排序

w1ldptr Lv1

以下是在C语言中使用冒泡法由大到小对10个整数进行排序的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void bubbleSortDescending(int arr[], int n) 
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
// 如果当前元素小于下一个元素,则交换它们
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}

int main() {
int a[10];
// 输入10个整数
printf("请输入10个整数:\n");
for (int i = 0; i < 10; i++) {
scanf("%d", &a[i]);
}
bubbleSortDescending(a, 10);// 使用冒泡排序进行排序
// 输出排序后的数组
printf("排序后的整数(由大到小):\n");
for (int i = 0; i < 10; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}

代码解析

在上面的代码中,算法函数bubblesortDescending定义了一个数组用来存放输入的10个整数

最外层的for循环用于控制循环次数(共循环n-1次)

内层循环用来遍历当前状态数组中的每个元素,当发现当前元素小于下一个元素,即arr[j] < arr[j-1]时,使用{ int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; }对两个元素进行交换,从而使每次循环都将最小的元素“送”到数组末端,实现从大到小的排序

最后在main函数中使用循环输出整个数组

直观演示

假设输入的整数依次为21,3,49,5,6,10,80,66,17,43,每次内层循环执行后的数组为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
21,49,5,6,10,80,66,17,43,3

21,49,6,10,80,66,17,43,5,3

21,49,10,80,66,17,43,6,5,3

21,49,80,66,43,17,10,6,5,3

49,80,66,43,21,17,10,6,5,3

49,80,66,43,21,17,10,6,5,3 (此次遍历未改变,因为21与17本就在合适的位置,下同)

80,66,49,43,21,17,10,6,5,3 (自此其实已完成排序,但外层循环9次未结束)

80,66,49,43,21,17,10,6,5,3

80,66,49,43,21,17,10,6,5,3
  • Title: 【C语言】使用冒泡法排序
  • Author: w1ldptr
  • Created at : 2024-12-19 22:27:24
  • Updated at : 2024-12-19 22:41:22
  • Link: https://w1ldptr.xyz/2024/12/19/【C语言】使用冒泡法排序/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments