Bootstrap

18. 冒泡排序小游戏

文章目录

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;:生成一个 099 之间的随机数并赋值给数组的当前元素。

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通过多次遍历要排序的列表,逐次比较相邻的元素,并在必要时交换它们的位置,从而将最大(或最小)的元素逐步移动到列表的末尾(或开头),这个过程类似于水中的气泡逐渐上浮

;