C++递归实现选择排序算法

实现选择排序算法的递归版本,步骤如下:

步骤1:找到最小值

首先,在要排序的数组中找到最小值,这个过程可以用for循环来实现。具体实现如下:

// 找到数组中最小值的下标
int findMinIndex(int arr[], int startIndex, int endIndex)
{
    int minIndex = startIndex;
    for (int i = startIndex + 1; i <= endIndex; i++)
    {
        if (arr[i] < arr[minIndex])
        {
            minIndex = i;
        }
    }
    return minIndex;
}

步骤2:递归

然后,用递归实现选择排序算法。递归的过程如下:

  • 每次找到当前范围内(startIndex到endIndex)的最小值;
  • 如果这个最小值不是当前范围的第一个数,把这个最小值和范围的第一个数交换位置;
  • 把递归范围缩小为startIndex+1到endIndex。

最终,当startIndex>=endIndex时,排序就完成了。

代码实现如下:

// 递归实现选择排序算法
void selectionSortRecursive(int arr[], int startIndex, int endIndex)
{
    if (startIndex >= endIndex) return;   // 递归出口
    int minIndex = findMinIndex(arr, startIndex, endIndex);
    if (minIndex != startIndex)   // 如果最小值不是当前范围的第一个数,交换位置
    {
        int tmp = arr[startIndex];
        arr[startIndex] = arr[minIndex];
        arr[minIndex] = tmp;
    }
    selectionSortRecursive(arr, startIndex + 1, endIndex);   // 缩小递归范围
}

示例1

以数组{3, 2, 1}为例,进行递归选择排序的过程如下:

  • 范围是{3, 2, 1},找到最小值1,与3交换位置,得到{1, 2, 3}。
  • 范围是{2, 3},2是最小值,不需要交换位置。
  • 范围是{3},只有一个数,无需排序。
  • 排序完成。

最终结果为{1, 2, 3}。

示例2

以数组{5, 3, 6, 7, 1}为例,进行递归选择排序的过程如下:

  • 范围是{5, 3, 6, 7, 1},找到最小值1,与5交换位置,得到{1, 3, 6, 7, 5}。
  • 范围是{3, 6, 7, 5},找到最小值3,与3交换位置,得到{1, 3, 6, 7, 5}。
  • 范围是{6, 7, 5},找到最小值5,与6交换位置,得到{1, 3, 5, 7, 6}。
  • 范围是{7, 6},6是最小值,不需要交换位置。
  • 范围是{7},只有一个数,无需排序。
  • 排序完成。

最终结果为{1, 3, 5, 6, 7}。

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

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

相关文章

  • 大数据情况下桶排序算法的运用与C++代码实现示例

    桶排序算法是一种基于计数的排序算法,它的主要思想是把一组数据分成多个桶,对每个桶中的数据进行排序,最后依次把每个桶中的数据合并起来,得到排序后的结果。在大数据情况下,桶排序算法可以大幅减少排序时间,因为它可以快速地将数据分成多个桶,进行并行排序,最终合并起来。 以下是桶排序算法在大数据情况下的运用及C++代码示例: 算法思路 先确定桶的数量,也就是需要将数据…

    算法与数据结构 2023年5月19日
    00
  • 手把手教你搞懂冒泡排序和选择排序

    手把手教你搞懂冒泡排序和选择排序 冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换的数据为止。 算法流程 比较相邻的元素。如果当前的元素大于下一个元素,则交换它们的位置。 对每一对相邻元素都执行步骤 1,从开始第一对到…

    算法与数据结构 2023年5月19日
    00
  • MS-office计算机二级选择题大全

    MS-office计算机二级选择题大全攻略 为了帮助读者顺利通过MS-office计算机二级考试,我整理了以下的攻略: 1. 熟悉考试内容 首先要熟悉考试的内容,明确各个模块的考试重点,掌握考试的基本知识点和技巧,不仅能够提高备考效率,也能在考试时更加得心应手。 2. 做足练习 除了熟悉考试内容之外,还需要通过做题来掌握一些技巧和方法。需要多做相关题目和模拟…

    算法与数据结构 2023年5月19日
    00
  • php数组冒泡排序算法实例

    让我们来详细讲解一下“PHP 数组冒泡排序算法实例”。 什么是冒泡排序? 冒泡排序算法是一种基于比较的排序算法,它重复地遍历要排序的列表,比较相邻的两个元素,如果它们的顺序错误,就将它们交换位置。这个过程直接比较相邻元素,每一轮都将最小的元素放到序列的开头,就像气泡不断上升一样,因此得名冒泡排序。 基本的冒泡排序实现方法 下面是一个基本的实现方法,用 PHP…

    算法与数据结构 2023年5月19日
    00
  • JavaScript中的排序算法代码

    JavaScript中的排序算法是基于不同的算法实现的,主要包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。下面我们会分别讲解这些算法的具体实现过程,其中包括每个算法的时间复杂度、空间复杂度、优缺点以及关键代码实现。 冒泡排序 冒泡排序是一种交换排序算法,其基本思想是重复地从序列中比较相邻的两个元素,一遍遍地交换相邻逆序的元素。在一趟排序中如果没有进…

    算法与数据结构 2023年5月19日
    00
  • JAVA中数组从小到大排序的2种方法实例

    JAVA中数组从小到大排序的2种方法实例 在Java中,对数组进行排序是一项常见的任务。本文将介绍Java中数组从小到大排序的两种方法。 方法一:使用Arrays.sort()方法 Arrays.sort()方法可用于对Java中的数组进行排序。排序之后,数组中的元素将按升序排列。 以下是示例代码: import java.util.Arrays; publ…

    算法与数据结构 2023年5月19日
    00
  • 使用C语言求解扑克牌的顺子及n个骰子的点数问题

    “使用C语言求解扑克牌的顺子及n个骰子的点数问题”,我们可以分别来看一下。 1. 求解扑克牌的顺子 首先我们需要了解什么是扑克牌的顺子,即五张连续的牌,如”10 J Q K A”等。因为一副牌里,最小的牌为2,最大的牌为A(即1),所以任何5张牌中最大和最小的差值不能超过4。 我们可以先将5张牌进行排序,然后用最大牌和最小牌计算差值,再去除所有大小王,如果差…

    算法与数据结构 2023年5月19日
    00
  • C/C++实现三路快速排序算法原理

    C/C++实现三路快速排序算法原理 算法概述 三路快速排序算法是一种优化版本的快速排序算法,能够处理含有大量重复元素的数组,避免了快速排序中大量递归处理相等元素的繁琐工作。 三路快速排序的原理是采用三个指针将数组分成小于、等于和大于三个部分,递归地向下快速排序,最终将整个数组排序。 实现步骤 首先选取数组中的一个元素作为标志物,通常是数组的第一个元素。 定义…

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