C++选择排序算法实例详解

C++选择排序算法实例详解

选择排序算法简介

选择排序是一种简单直观的排序算法,其思想是首先找到序列中的最小值,然后将其放到序列的最前面。接着,从剩余序列中找到次小值,将其放到已排序序列的末尾。以此类推,直到排序完成。

选择排序算法的时间复杂度为$O(n^2)$,空间复杂度为$O(1)$,并且由于其算法思想简单,代码实现容易,所以在实际应用中还是比较常见的排序算法之一。

C++选择排序实现

以下是C++中选择排序的实现代码:

#include <iostream>
#include <vector>
using namespace std;

void selectionSort(vector<int>& arr) {
    int n = arr.size(); // 计算数组的大小
    for (int i = 0; i < n - 1; i++) {
        int minIdx = i; // 定义最小值的下标为i
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIdx]) {
                minIdx = j; // 更新最小值的下标
            }
        }
        swap(arr[i], arr[minIdx]); // 将当前最小值放到正确的位置
    }
}

int main() {
    vector<int> arr{9, 2, 1, 4, 3, 7, 5};
    selectionSort(arr);
    for (int num : arr) {
        cout << num << " ";
    }
    cout << endl;
    return 0;
}

代码中的selectionSort函数接受一个整型数组作为参数,将其进行排序。n表示数组的大小,第一个for循环用于遍历数组的除最后一个元素以外的所有元素,每次循环找到未排序序列中的最小值,并将其放到已排序序列的末尾。内层的for循环用于查找未排序序列中的最小值,minIdx变量记录当前最小值的下标。swap函数用于交换数组中的元素。

选择排序示例1

假设现有一个数组arr为 {9, 4, 6, 1, 3},按照选择排序的方法对其进行排序。

  1. 首先,最小值为1,将此值与第一个元素9交换位置,现在数组变为{1, 4, 6, 9, 3}。
  2. 接着,找到次小值3,将其与第二个元素4交换位置,现在数组变为{1, 3, 6, 9, 4}。
  3. 然后,找到次小值4,将其与第三个元素6交换位置,现在数组变为{1, 3, 4, 9, 6}。
  4. 然后,找到次小值6,将其与第四个元素9交换位置,现在数组变为{1, 3, 4, 6, 9}。
  5. 最后,遍历完成后,得到已经排好序的数组{1, 3, 4, 6, 9}。

选择排序示例2

假设现有一个数组arr为 {5, 8, 1, 3, 6, 4},按照选择排序的方法对其进行排序。

  1. 首先,最小值为1,将此值与第一个元素5交换位置,现在数组变为{1, 8, 5, 3, 6, 4}。
  2. 接着,找到次小值3,将其与第三个元素5交换位置,现在数组变为{1, 8, 3, 5, 6, 4}。
  3. 然后,找到次小值4,将其与第四个元素5交换位置,现在数组变为{1, 8, 3, 4, 6, 5}。
  4. 接下来,找到次小值5,将其与最后一个元素6交换位置,现在数组变为{1, 8, 3, 4, 5, 6}。
  5. 遍历完成后,得到已经排好序的数组{1, 3, 4, 5, 6, 8}。

结语

以上就是C++中选择排序的实现方法,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++选择排序算法实例详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • c++归并排序详解

    C++归并排序详解 归并排序是一种基于分治思想的高效排序算法,它的时间复杂度为O(nlogn),并且它的稳定性使得它在实际应用中得到了广泛的应用。在本文中,我们将为大家详细讲解C++归并排序的具体实现过程和算法思想。 算法原理 归并排序基于分治算法,首先将待排序序列不断二分,直到每个子序列只剩一个元素,然后将相邻的子序列进行归并,合并后的子序列再次进行归并,…

    算法与数据结构 2023年5月19日
    00
  • php计数排序算法的实现代码(附四个实例代码)

    php计数排序算法的实现代码 是什么? 计数排序是一种线性时间复杂度的排序算法,该算法的核心思想是对每个输入元素统计出小于该元素的元素个数,根据此信息可以直接确定每个元素在排序后数组中的位置。在实现过程中需要开辟一定的内存空间来存储统计的数据。 php计数排序算法的实现代码 的思路是什么? 创建一个计数数组counts,长度为maxValue+1,maxVa…

    算法与数据结构 2023年5月19日
    00
  • C++实现希尔排序(ShellSort)

    下面是关于C++实现希尔排序(ShellSort)的攻略。 什么是希尔排序? 希尔排序是插入排序的一种改进版本,与普通插入排序不同的是,它会先将数组按一定间隔 gap 分成若干个小组进行插入排序,然后缩小间隔再分组排序,直到最后 gap 为 1,此时整个序列就是有序的。希尔排序的本质就是分组的插入排序。 希尔排序的代码实现 下面针对希尔排序的核心代码进行讲解…

    算法与数据结构 2023年5月19日
    00
  • Redis使用ZSET实现消息队列使用小结

    Redis使用ZSET实现消息队列使用小结 概述 Redis是一款功能强大的开源的In-Memory数据结构存储系统,除了支持key-value结构外,它还提供了List、Set、Hash和ZSet。其中ZSet是有序集合,它可以在插入元素时指定一个score值,可以根据score进行排序,也可以查看属于某个score范围内的元素。因此,ZSet也可以用来实…

    算法与数据结构 2023年5月19日
    00
  • Java语言字典序排序算法解析及代码示例

    Java语言字典序排序算法解析及代码示例 概述 字典序排序是一种常见的字符串排序算法,其可用于字符串编程中的许多场景,例如:搜索引擎中输入提示的联想;电商网站的商品搜索结果排列;信息化项目中的数据对比等。 本文将介绍Java语言中使用字典序排序的方法以及实现代码,并包含两个代码示例以帮助读者更好地理解。 基本思想 字典序排序的基本思想是将需要排序的字符串按照…

    算法与数据结构 2023年5月19日
    00
  • C语言实现排序算法之归并排序详解

    C语言实现排序算法之归并排序详解 概述 归并排序是一种分治算法,在处理大规模数据排序时具有较高的效率。该算法将要排序的数组分为两部分,对每个部分内部进行排序,然后将排好序的两部分合并成一个有序数组。该算法在实现时需要借助递归和迭代两种方式。 步骤 归并排序可递归或迭代实现。以下是递归实现的步骤: 分解:将待排序数组分为两个等长的子数组,分别为左半部分和右半部…

    算法与数据结构 2023年5月19日
    00
  • Java 直接插入排序的三种实现

    Java 直接插入排序的三种实现 本文将介绍 Java 中直接插入排序的三种实现方式,分别为插入排序、希尔排序和折半插入排序。 插入排序 插入排序是一种简单直观的排序算法,其基本思想是将一个待排序的元素插入到已排好序列中的适当位置。 以下是 Java 中插入排序的实现代码: public static void insertSort(int[] arr) {…

    算法与数据结构 2023年5月19日
    00
  • php实现归并排序算法的方法详解

    PHP实现归并排序算法的方法详解 归并排序算法简介 归并排序是一种使用分治法思想的高效稳定排序算法。其基本思想是将待排序的序列拆分成若干个子序列,对每个子序列进行排序,然后将排序后的子序列合并成一个大的有序序列。 归并排序算法的复杂度为O(nlogn),适用于各种数据规模的排序。 归并排序算法步骤 将序列递归拆分成若干个子序列。 对每个子序列进行递归排序。 …

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部