C++实现选择性排序(SelectionSort)

C++实现选择性排序(SelectionSort)

选择性排序(Selection Sort)是计算机科学中一种简单直观的排序算法。它的工作原理是:首先在未排序的数列中找到最小(大)的元素,然后将其存放到数列的起始位置,接着再从剩余的未排序元素中继续寻找最小(大)的元素,然后放到已排序序列的末尾。以此类推,直到所有元素均被排序完毕。

具体的实现步骤如下:

  1. 在未排序的数列中找到最小元素。
  2. 将其存放到数列的起始位置。
  3. 从剩余未排序的元素中继续寻找最小元素。
  4. 将其存放到已排序序列的末尾。
  5. 以此类推,直到所有元素均被排序完毕。

以下是C++代码实现以及相关注释:

#include <iostream>
using namespace std;

void selectionSort(int arr[], int n) {
    int i, j, min_idx;

    // 依次遍历数组元素
    for (i = 0; i < n - 1; i++) {

        // 找到未排序区域中最小元素的下标
        min_idx = i;
        for (j = i + 1; j < n; j++)
            if (arr[j] < arr[min_idx])
                min_idx = j;

        // 将未排序区域中最小元素放到已排序序列的末尾
        swap(arr[min_idx], arr[i]);
    }
}

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

    // 调用选择排序函数
    selectionSort(arr, n);

    // 打印排序后的数组
    cout << "Sorted array: ";
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";

    return 0;
}

在本示例中,我们定义了一个名为 selectionSort() 的排序算法函数来进行选择排序,并将完整的未排序数组作为函数实参传递,以及数组中的元素数目 n

使用两个循环来实现选择排序的算法。通过第一个循环遍历数组中的每个未排序元素,通过第二个循环遍历未排序区域中的元素,并找到最小元素的下标。然后将未排序区域中的最小元素放到已排序序列的末尾,以达到排序的目的。

以下是示例,更具体地展示了本算法的工作原理:

示例1:

假设输入的未排序数组为 {64, 25, 12, 22, 11}。在第一次循环之后,我们可以通过找到最小的元素(11)并将其放置在数组的开头位置时得到以下结果:

11 25 12 22 64

示例2:

在第二次循环后,我们可以找到最小元素(12)并将其放置在索引 1 的位置,以下是本次循环的结果:

11 12 25 22 64

继续执行以上步骤,直到所有元素都被排序完成,得到如下排序后的数组:

11 12 22 25 64

希望这个C++实现选择性排序(SelectionSort)的教程对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现选择性排序(SelectionSort) - Python技术站

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

相关文章

  • 排序算法之PHP版快速排序、冒泡排序

    排序算法之PHP版快速排序、冒泡排序 在算法和数据结构中,排序是一种重要的操作,主要目的是将一组无序的数据按照一定的规则进行排序。常见的排序算法有冒泡排序、快速排序、归并排序等。本文将详细介绍php版本的快速排序和冒泡排序的实现。 冒泡排序 冒泡排序是一种最简单的排序算法之一。其思想是从数组的第一个元素开始比较,将大的元素交换到后面,依次比较下去,直到排序完…

    算法与数据结构 2023年5月19日
    00
  • C/C++实现快速排序(两种方式)图文详解

    C/C++实现快速排序(两种方式)图文详解 什么是快速排序 快速排序是一种基于分治策略的排序算法,由C.A.R.Hoare在1962年发明。快速排序的基本思路是:在待排序序列中选择一个元素作为“基准”(pivot),将序列分成两个部分,所有比“基准”小的元素放在一边,所有比“基准”大的元素放在另一边。如此递归下去直到序列有序。 算法流程 快速排序的流程可以简…

    算法与数据结构 2023年5月19日
    00
  • C#中使用快速排序按文件创建时间将文件排序的源码

    下面就来详细讲解如何在C#中使用快速排序按文件创建时间将文件排序的源码攻略。 1. 快速排序原理 快速排序(Quick Sort)是一种基于分治法的高效排序算法,其主要思想是选择一个基准点(pivot),将数组分为左右两个子数组,将左边的数组的元素都小于基准点,右边的数组的元素都大于基准点,再递归对左右子数组进行快排操作,直到子数组长度为1或0。快速排序的时…

    算法与数据结构 2023年5月19日
    00
  • C++选择排序算法实例详解

    C++选择排序算法实例详解 选择排序算法简介 选择排序是一种简单直观的排序算法,其思想是首先找到序列中的最小值,然后将其放到序列的最前面。接着,从剩余序列中找到次小值,将其放到已排序序列的末尾。以此类推,直到排序完成。 选择排序算法的时间复杂度为$O(n^2)$,空间复杂度为$O(1)$,并且由于其算法思想简单,代码实现容易,所以在实际应用中还是比较常见的排…

    算法与数据结构 2023年5月19日
    00
  • JavaScript实现经典排序算法之冒泡排序

    JavaScript实现经典排序算法之冒泡排序 什么是冒泡排序? 冒泡排序是一种简单的排序算法,从序列左侧开始比较两个相邻的元素,如果顺序不对就交换位置,直到序列末尾,这样一次遍历后,序列最后一个元素就是当前序列最大值。然后对剩余序列重复上述过程,直到整个序列有序。 算法实现 我们来看看如何用JavaScript实现冒泡排序。 function bubble…

    算法与数据结构 2023年5月19日
    00
  • java实现图形卡片排序游戏

    以下是“Java实现图形卡片排序游戏”的完整攻略。这个游戏的目标是将打乱的卡片,按顺序排好。具体的操作方法是通过拖拽卡片,让卡片位置移动进行排序。 技术栈 Java语言 Swing GUI库 排序算法 功能设计 加载卡片图片及绑定事件处理方法 卡片随机化处理 拖拽移动卡片 实现移动时的动画效果 判断拼图是否按顺序排好 记录游戏步骤、分数等信息 具体实现 加载…

    算法与数据结构 2023年5月19日
    00
  • C语言快速排序函数用法(qsort)

    C语言快速排序函数用法(qsort) 简介 快速排序是一种常见的排序算法,而C语言中的qsort函数则是一种快速排序的实现。使用qsort函数,我们无需自己编写快速排序算法的代码,只需要提供一个排序所需的比较函数即可。使用qsort函数,既可以方便的排序数组,还可以排序链表等数据结构。 函数原型 void qsort(void *base, size_t n…

    算法与数据结构 2023年5月19日
    00
  • PHP两种快速排序算法实例

    下面是对PHP两种快速排序算法实例的详细讲解: 1. 快速排序算法介绍 快速排序属于交换排序的一种,是目前应用最广泛的排序算法之一,也是学习算法的重要内容。快速排序算法的基本思想是通过将待排序序列进行划分,并不断递归对子序列进行排序,完成整个序列的排序。 快速排序的基本步骤如下: 选择一个基准值(pivot)。 将待排序数组中小于基准值的元素移动到数组左侧,…

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