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日

相关文章

  • python中的插入排序的简单用法

    下面是Python中插入排序的简单用法攻略: 1. 什么是插入排序 插入排序是一种简单的排序算法,它的基本思想是将未排序的元素依次插入到已排序的有序序列中的合适位置,以此完成排序。插入排序的时间复杂度为O(n^2),通常用于小规模数据的排序。 2. 插入排序的Python实现 以下是插入排序的Python代码实现: def insertion_sort(da…

    算法与数据结构 2023年5月19日
    00
  • JS插入排序简单理解与实现方法分析

    JS插入排序简单理解与实现方法分析 描述 插入排序是一种比较简单的排序方法,它的核心思想是将待排序的元素,依次插入到已经排好序的部分,从而逐渐将整个序列排好。具有较好的稳定性和适用性。 实现思路 插入排序的实现思路: 将第一个元素当做已经排序好的序列 从第二个元素开始遍历整个数组 回溯已经排序好的序列,将当前元素插入到比它大的元素之前 重复2、3步骤直到排序…

    算法与数据结构 2023年5月19日
    00
  • PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)

    当我们需要进行字符串比较时,通常会使用PHP中的strcmp()函数。但是,如果比较的字符串中包含数字,则会出现问题。举个例子,如果我们将”file9.txt”和”file10.txt”进行比较,strcmp()函数会认为”file10.txt”小于”file9.txt”,因为在ASCII码中,数字1比数字9要小。 为了解决这个问题,PHP提供了一个自然排序…

    算法与数据结构 2023年5月19日
    00
  • C++实现选择性排序(SelectionSort)

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

    算法与数据结构 2023年5月19日
    00
  • C语言基本排序算法之插入排序与直接选择排序实现方法

    C语言基本排序算法之插入排序与直接选择排序实现方法 本文将介绍C语言中两种常见的基本排序算法:插入排序和直接选择排序。我们将会详细阐述它们的实现方法,并提供示例代码来帮助理解和实践。 插入排序 插入排序是一种简单而常见的排序算法,它将待排序的数列分成已排序和未排序两部分,初始时已排序部分只包含一个元素,随着算法的运行,每次从未排序部分中取出第一个元素插入到已…

    算法与数据结构 2023年5月19日
    00
  • 全排列算法的非递归实现与递归实现的方法(C++)

    全排列算法是计算机科学领域中的一个经典问题,其功能是对给定的一组数进行全排列。在本文中,我们将对该算法的非递归实现和递归实现方法进行详细讲解。本文的代码示例基于C++语言。 非递归实现方法 算法思路 假设我们想对n个数进行全排列,那么我们可以首先将这n个数按照升序排列,然后使用以下步骤: 把这n个数的全排列问题转化为n-1个数的全排列问题; 依次取出每一个数…

    算法与数据结构 2023年5月19日
    00
  • JS实现数组按升序及降序排列的方法

    JS实现数组按升序和降序排列的方法有很多种,下面我将从简单到复杂分享几种方法。 sort()方法 sort()方法是JS的一个数组方法,可以对数组排序。它有一个可选的排序函数,用于规定排序规则。 升序排列: let arr = [3, 1, 4, 7, 2]; arr.sort((a, b) => a – b); console.log(arr); /…

    算法与数据结构 2023年5月19日
    00
  • JavaScript算法面试题

    JavaScript算法面试题攻略 1. 理解算法 在准备 JavaScript 算法面试前,需要先了解什么是算法。算法是指解决问题的一系列步骤,常用于解决复杂的问题,在计算机科学中有非常重要的应用。 2. 熟悉常见数据结构 准备算法面试的重点是熟悉常见数据结构。这些数据结构包括数组、链表、栈、队列、堆、散列表等。 3. 学习算法题的分类 在解决算法问题之前…

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