#include<iostream>  // 导入输入输出库,让电脑能读数字和打印结果
using namespace std; // 使用标准命名空间(暂时理解成“固定开头”)

const int n = 10;    // 定义常量n=10,表示我们要排序10个数字
int a[n + 1];        // 定义数组a,有11个位置(0-10),但我们只用1-10来存数字

int main() {         // 主函数,程序从这里开始运行
    // 第一步:输入10个数字
    cout << "请输入10个数字,用空格隔开:" << endl;
    for (int i = 1; i <= n; ++i) {  // 循环10次(i从1到10)
        cin >> a[i];  // 把输入的数字存到数组a的第i个位置(像给桶编号1-10放数字)
    }

    // 第二步:冒泡排序(核心部分)
    for (int i = 1; i <= n - 1; ++i) {       // 外层循环:控制排序轮数(总共n-1轮)
        for (int j = 1; j <= n - i; ++j) {    // 内层循环:每轮比较相邻的两个数字
            if (a[j] < a[j + 1]) {            // 如果左边的数字比右边小
                swap(a[j], a[j + 1]);         // 就交换它们(让大的数字往右“冒泡”)
            }
        }
        // 每一轮结束后,当前最大的数字会“沉”到最右边(像泡泡浮到水面)
    }

    // 第三步:输出排序后的结果
    cout << "从大到小排序后的结果是:" << endl;
    for (int i = 1; i <= n; ++i) {  // 循环打印数组a的1-10号位置
        cout << a[i] << " ";        // 输出数字,用空格隔开
    }
    cout << endl;  // 最后换行(像写完一行字后按回车)

    return 0;  // 程序结束,告诉电脑“一切正常”
}

举个实际例子 假设输入是 3 1 4 2(简化版,n=4):

第一轮(i=1):

比较3和1 → 不交换 → [3,1,4,2]

比较1和4 → 交换 → [3,4,1,2]

比较1和2 → 交换 → [3,4,2,1](最大的4到了最后)

第二轮(i=2):

比较3和4 → 交换 → [4,3,2,1]

比较3和2 → 不交换 → [4,3,2,1](第二大的3到了倒数第二)

第三轮(i=3):

比较4和3 → 不交换 → [4,3,2,1](排序完成!)

0 条评论

目前还没有评论...