当前位置:首页C++ > 正文

野牛程序员讲少儿编程之选择排序(C++)—— 一步步带孩子学排序!

作者:野牛程序员:2025-03-14 12:08:35C++阅读 2068
野牛程序员讲少儿编程之选择排序(C++)—— 一步步带孩子学排序!

🎯 野牛程序员讲少儿编程之选择排序(C++)—— 一步步带孩子学排序!

💡 选择排序(Selection Sort)是一种简单但很重要的排序算法,适合孩子们入门 C++ 编程。今天就来用最通俗易懂的方式,把它讲清楚!


🌟 什么是选择排序?

选择排序(Selection Sort)是一种 每次找到最小(或最大)元素,并放到正确位置 的排序方法。

核心思想

  1. 从未排序部分找到最小的元素

  2. 把最小元素和当前位置的元素交换

  3. 重复这个过程,直到排序完成

时间复杂度

  • 最坏情况(倒序)O(n²)

  • 最好情况(已经排好序)O(n²)

  • 平均情况O(n²)

适合孩子理解的比喻: 想象一下,现在有一群小朋友排队,要按 身高从矮到高 排列。选择排序的方式就像这样:

  • 先找出 最矮的,把他放到第一位

  • 再从剩下的孩子里找 第二矮的,放到第二位

  • 依次重复,直到所有孩子都按身高排好


🚀 野牛程序员C++ 代码实现

🔹 版本 1:基础版

#include <iostream>
using namespace std;

void selectionSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int minIndex = i; // 假设当前位置是最小值
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j; // 找到更小的元素
            }
        }
        // 交换最小元素到当前位置
        swap(arr[i], arr[minIndex]);
    }
}

// 打印数组
void printArray(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    int arr[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    cout << "排序前: ";
    printArray(arr, n);

    selectionSort(arr, n);

    cout << "排序后: ";
    printArray(arr, n);
    
    return 0;
}


🔹 输出

排序前: 64 25 12 22 11 
排序后: 11 12 22 25 64

📌 野牛程序员代码解析

1️⃣ selectionSort() 排序函数

void selectionSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {  // 遍历 n-1 次
        int minIndex = i;  // 假设当前索引 i 是最小值
        for (int j = i + 1; j < n; j++) {  // 在剩余数组中寻找更小的值
            if (arr[j] < arr[minIndex]) {  // 发现更小的值
                minIndex = j;
            }
        }
        swap(arr[i], arr[minIndex]); // 交换当前索引 i 和最小索引 minIndex 的值
    }
}

外层循环:遍历数组 n-1 次,每次选出一个最小值
内层循环:在未排序部分寻找最小值
swap(arr[i], arr[minIndex]):交换当前元素和找到的最小值



🔥 选择排序的可视化

轮次数组状态说明
初始64, 25, 12, 22, 11初始数组
第 1 轮11, 25, 12, 22, 64找到 11(最小),和 64 交换
第 2 轮11, 12, 25, 22, 64找到 12(最小),和 25 交换
第 3 轮11, 12, 22, 25, 64找到 22(最小),和 25 交换
第 4 轮11, 12, 22, 25, 6425 已经是最小值,不用换
结束11, 12, 22, 25, 64排序完成 ✅

🌟 野牛程序员讲版本 2:改进版(降序排序)

如果想按 从大到小 排序,只需要把 < 变成 >

if (arr[j] > arr[minIndex]) {  // 找到更大的值
    minIndex = j;
}

完整代码:

#include <iostream>
using namespace std;

void selectionSortDescending(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int maxIndex = i;
        for (int j = i + 1; j < n; j++) {
            if (arr[j] > arr[maxIndex]) {
                maxIndex = j;
            }
        }
        swap(arr[i], arr[maxIndex]);
    }
}

// 打印数组
void printArray(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    int arr[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr) / sizeof(arr[0]);

    cout << "排序前: ";
    printArray(arr, n);

    selectionSortDescending(arr, n);

    cout << "排序后: ";
    printArray(arr, n);

    return 0;
}

🔹 排序结果(降序):

排序后: 64 25 22 12 11

💡 野牛程序员讲选择排序的优缺点

✅ 优点

  • 逻辑简单,容易理解

  • 不需要额外的存储空间(原地排序

  • 适用于小规模数据排序

❌ 缺点

  • 效率较低,即使数组本来是有序的,还是要比较

  • 不稳定排序,相同值的相对顺序可能改变


🎯 野牛程序员总结

选择排序虽然简单,但非常适合少儿编程的入门!

  • 核心概念:找到最小值,换到前面

  • 时间复杂度O(n²)

  • 适用场景:小规模数据,帮助孩子理解排序逻辑

💡 练习小挑战

  1. 试着改成降序排序

  2. 尝试用 vector<int> 代替数组

  3. 让孩子自己在纸上手动模拟一次选择排序

🚀 排序只是编程的开始,未来还能探索更快的排序方法,比如 快速排序(Quick Sort)! 💪


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • 野牛程序员讲少儿编程之选择排序(C++)—— 一步步带孩子学排序!
  • 相关推荐

    最新推荐

    热门点击