1. 概要
▓ Jack Qiao对米粒说:“今天超市门口做活动,让顾客按年龄大小进行排队,你能编写个程序实现吗?。”
☑ 米粒想到:可以逐步调整顺序以达到超市排队的规则,想到用冒泡排序(Bubble Sort)法来实现。
2. 整体架构流程
2.1. 头文件
#include <stdio.h> #include <stdlib.h> #include <time.h>
☑ 这里对头文件进行复习:
- #include <stdio.h>:用于标准输入输出函数,如 printf 和 scanf。
- #include <stdlib.h>:用于标准库函数,如 rand 和 srand。
- #include <time.h>:用于时间相关的函数,如 time。
2.2. 函数声明
void generateRandomArray(int array[], int size); void displayArray(const int array[], int size); void bubbleSort(int array[], int size);
☑ 这里对函数声明进行说明:
- generateRandomArray:生成一个随机数组。
- displayArray:显示数组的内容。
- bubbleSort:使用冒泡排序算法对数组进行排序。
2.3. 主函数
int main() { const int SIZE = 10; // 定义数组大小 int array[10]; // 明确指定数组大小 int choice; // 初始化随机数种子 srand(time(NULL)); // 生成随机数组 generateRandomArray(array, SIZE); printf("欢迎来到冒泡排序小游戏!\n"); printf("这是您的未排序数组:\n"); displayArray(array, SIZE); printf("请选择操作:\n1. 计算机自动排序\n2. 不排序,直接退出\n"); scanf("%d", &choice); switch (choice) { case 1: bubbleSort(array, SIZE); printf("排序后的数组:\n"); displayArray(array, SIZE); break; case 2: printf("再见!\n"); break; default: printf("无效的选择。\n"); return 1; } return 0; }
☑ 这里对程序一步步进行说明:
- const int SIZE = 10;:定义一个常量 SIZE,表示数组的大小。
- int array[10];:定义一个大小为 10 的整数数组。
- int choice;:定义一个整数变量 choice,用于存储用户的操作选择。
- srand(time(NULL));:初始化随机数生成器,确保每次运行程序时生成的随机数不同。
- generateRandomArray(array, SIZE);:调用 generateRandomArray 函数生成随机数组。
- printf 和 displayArray:显示欢迎信息和未排序的数组。
- scanf("%d", &choice);:从用户那里获取操作选择。
- switch (choice):根据用户的选择执行不同的操作:
- case 1:调用 bubbleSort 函数对数组进行排序,然后显示排序后的数组。
- case 2:直接退出程序。
- default:如果用户输入无效的选择,显示错误信息并返回 1。
2.4. 生成随机数组函数generateRandomArray
void generateRandomArray(int array[], int size) { for (int i = 0; i < size; ++i) { array[i] = rand() % 100; // 生成0到99之间的随机数 } }
☑ 这里对程序一步步进行说明:
- for (int i = 0; i < size; ++i):遍历数组的每个元素。
- array[i] = rand() % 100;:生成一个 0 到 99 之间的随机数并赋值给数组的当前元素。
2.5. 显示数组函数displayArray
void displayArray(const int array[], int size) { for (int i = 0; i < size; ++i) { printf("%d ", array[i]); } printf("\n"); }
2.6. 冒泡排序函数bubbleSort
void bubbleSort(int array[], int size) { for (int i = 0; i < size - 1; ++i) { for (int j = 0; j < size - 1 - i; ++j) { if (array[j] > array[j + 1]) { // 交换元素 int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } }
☑ 这里对程序一步步进行说明:
- for (int i = 0; i < size - 1; ++i):外层循环控制遍历次数。
- for (int j = 0; j < size - 1 - i; ++j):内层循环控制每次遍历时的比较和交换操作。
- if (array[j] > array[j + 1]):如果当前元素大于下一个元素,则交换它们的位置。
int temp = array[j];:临时变量 temp 用于交换操作。
2.7. 程序运行结果
2.8. 所有代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>// 函数原型声明
void generateRandomArray(int array[], int size);
void displayArray(const int array[], int size);
void bubbleSort(int array[], int size);int main() {
const int SIZE = 10; // 定义数组大小
int array[10]; // 明确指定数组大小
int choice;// 初始化随机数种子
srand(time(NULL));// 生成随机数组
generateRandomArray(array, SIZE);printf("欢迎来到冒泡排序小游戏!\n");
printf("这是您的未排序数组:\n");
displayArray(array, SIZE);printf("请选择操作:\n1. 计算机自动排序\n2. 不排序,直接退出\n");
scanf("%d", &choice);switch (choice) {
case 1:
bubbleSort(array, SIZE);
printf("排序后的数组:\n");
displayArray(array, SIZE);
break;
case 2:
printf("再见!\n");
break;
default:
printf("无效的选择。\n");
return 1;
}return 0;
}// 生成随机数组
void generateRandomArray(int array[], int size) {
for (int i = 0; i < size; ++i) {
array[i] = rand() % 100; // 生成0到99之间的随机数
}
}// 显示数组
void displayArray(const int array[], int size) {
for (int i = 0; i < size; ++i) {
printf("%d ", array[i]);
}
printf("\n");
}// 冒泡排序函数
void bubbleSort(int array[], int size) {
for (int i = 0; i < size - 1; ++i) {
for (int j = 0; j < size - 1 - i; ++j) {
if (array[j] > array[j + 1]) {
// 交换元素
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
3. 技术名词解释
☑ 冒泡排序举个栗子:
void bubbleSort(int array[], int size) { for (int i = 0; i < size - 1; ++i) { for (int j = 0; j < size - 1 - i; ++j) { if (array[j] > array[j + 1]) { // 交换元素 int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } }
~ 可以看出:
► 冒泡排序法是一种通过反复交换相邻元素的位置,将最大(或最小)的元素逐步移至序列末尾(或开头)的简单排序算法。
4. 小结
► 冒泡排序(Bubble Sort)通过多次遍历要排序的列表,逐次比较相邻的元素,并在必要时交换它们的位置,从而将最大(或最小)的元素逐步移动到列表的末尾(或开头),这个过程类似于水中的气泡逐渐上浮。