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

yizhihongxing

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

步骤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日

相关文章

  • php通过ksort()函数给关联数组按照键排序的方法

    如果需要将PHP关联数组按照键进行排序,可以使用ksort()函数。以下是使用ksort()函数给关联数组按照键排序的完整攻略: 第一步:创建一个关联数组 首先,创建一个包含多个元素的关联数组,这些元素都是键/值对。 $assoc_array = array( "name" => "John", "ag…

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

    下面是详细讲解Go语言实现冒泡排序算法的完整攻略: 1. 什么是冒泡排序? 冒泡排序是一种基于交换的排序算法,算法通过比较相邻的元素,将比较大的元素交换到后面,从而达到排序的目的。这个过程就像是水中不断上冒的气泡,因此称之为冒泡排序。 冒泡排序是经典的排序算法之一,它虽然时间复杂度高达 O(n^2),但其思想简单,易于理解和实现,并且在某些特殊的情况下,它的…

    算法与数据结构 2023年5月19日
    00
  • C语言完整实现12种排序算法(小结)

    C语言完整实现12种排序算法(小结) 本文主要介绍了C语言实现12种排序算法的详细过程以及相关示例。 排序算法的分类 排序算法可分为内部排序和外部排序。内部排序是指将待排序的数据全部加载到内存中进行排序,而外部排序是指在数据量过大时需要将数据分块,对每一块数据进行排序,最后将各个块合并起来,得到有序的结果。 在内部排序中,常用的排序算法大致可分为以下几类: …

    算法与数据结构 2023年5月19日
    00
  • php实现快速排序的三种方法分享

    那么现在我将为您介绍“php实现快速排序的三种方法分享”的完整攻略。 什么是快速排序 快速排序(Quick Sort)通常被认为是对冒泡排序的一种改进。在冒泡排序中,需要进行多次的数据比较和交换操作,而快速排序与其不同之处在于它通过一个基准值将待排序的数组分成两个部分。在计算机领域,快速排序是一种常见的排序算法。 快速排序的常规实现思路 快速排序的常规实现思…

    算法与数据结构 2023年5月19日
    00
  • 关于Python排序问题(冒泡/选择/插入)

    关于Python排序问题,一般包括冒泡排序、选择排序和插入排序。下面分别进行介绍。 冒泡排序 冒泡排序就是重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。重复地进行以上操作,直到没有可以交换的元素为止。 示例代码: def bubble_sort(arr): n = len(arr) for i in range(n-1): …

    算法与数据结构 2023年5月19日
    00
  • 深入理解JS实现快速排序和去重

    深入理解JS实现快速排序和去重 1.快速排序 快速排序是一种快速并且高效的排序算法。下面是快速排序的步骤: 选择数组中的中心元素作为基准点(pivot) 将所有小于基准点的元素移到基准点的左侧,所有大于基准点的元素移到基准点的右侧 对左右两个子数组递归执行步骤1和步骤2,直到子数组长度为1或0 快速排序可以用以下的JavaScript代码来实现: funct…

    算法与数据结构 2023年5月19日
    00
  • Linux静态链接库使用类模板的快速排序算法

    下面是对“Linux静态链接库使用类模板的快速排序算法”的详细讲解。 简介 静态链接库是一种文件格式,其中包含了许多可共享的目标文件,这些目标文件可以在运行时被动态链接器加载。可以将静态链接库视为预编译的代码,包含在可执行程序中,因此在执行时无需加载库文件,从而提高程序的运行效率。 在Linux下,可以使用静态链接库的方式来实现类模板的快速排序算法,具有较高…

    算法与数据结构 2023年5月19日
    00
  • C语言简明讲解快速排序的应用

    C语言简明讲解快速排序的应用 快速排序的概述 快速排序是一种基于比较的排序算法,最初由Tony Hoare于1959年发明,因其在实践中的高效性而受到广泛的应用。快速排序的基本思想是通过不断地分割(partition)和交换(swap)来实现排序,具体来说,就是先选取一个pivot数,然后将序列中小于pivot的数放在pivot左边,大于pivot的数放在p…

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