TypechoJoeTheme

鱼一的博客 ◡̈

yuyi

知不可乎骤得,托遗响于悲风
网站页面
标签搜索

选择排序

选择排序是一种基本的排序算法,它通过在每次迭代中选择剩余元素中的最小(或最大)元素,并将其放到已排序序列的末尾来工作。在选择排序中,我们同样看到两层循环,每层循环的作用和次数具有其特定的逻辑和意义。

外层循环

外层循环的变量通常被称为 i,这个循环控制选择过程的次数。对于一个包含 n 个元素的数组,最多只需要进行 n-1 次选择来完成排序。这是因为当你已经正确放置了 n-1 个元素之后,最后一个元素自然就处于其正确的位置,无需再进行选择和交换。换句话说,进行 n-1 次选择后,整个数组就已经被完全排序了。

内层循环

内层循环的变量通常被称为 j,这个循环负责查找从 i+1n 的范围内的最小元素。内层循环从 i+1 开始是因为在每一轮的开始,i 位置之前的所有元素已经被排序好,因此不需要再次考虑它们。这个循环将遍历未排序的部分,查找最小元素的索引。

这里的 n 是因为内层循环需要检查数组中剩余未排序部分的所有元素。对于每一轮,你开始时已经有 i 个元素是排序好的,所以你需要从 i+1 开始,直到数组的末尾 n,这样可以保证考虑所有可能是当前最小的元素。

总结

在选择排序中:

  • 外层循环 定义了进行选择和交换的总次数,是 n-1,因为最后一个元素无需再选择。
  • 内层循环 负责在未排序的数组部分找到最小元素的索引,这部分需要从当前元素的下一个位置一直检查到数组的末尾。

选择排序的特点是它不断地选择剩余元素中的最小值,并将它们放在已排序的部分的末尾,这样的操作确保每次迭代后排序的部分都增长一位。虽然它的时间复杂度为 (O(n^2)),对于较小或部分预排序的数据它可以相当高效。

#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;
            }
        }
        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
}
赞(0)
版权属于:

鱼一的博客 ◡̈

本文链接:

https://yuyi.monster/archives/249/(转载时请注明本文出处及文章链接)

评论 (0)

More Info for me 📱

IP信息

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月