选择在C++中递归排序

Selection sort recursively in C++

本文关键字:递归 排序 C++ 选择      更新时间:2023-10-16

我的递归选择排序函数似乎产生了一个错误。如果有人帮忙修理这只野兽,我们将不胜感激。

#include <iostream>
#include <algorithm>
using namespace std;
void selection_sort(int[],int);
int main()
{
    int a[5] = {5,4,3,2,1};
    selection_sort(a,5);
    return 0;
}
void selection_sort(int arr[],int n){
    int max_pos;
    if(n == 0) return;
    int max = *max_element(arr,arr+n);
    for(int i = 0; i < n;i++){
        if(arr[max] == max){
            max_pos = i;
        }
    }
    swap(arr[max_pos],arr[n-1]);
    selection_sort(arr,n--);
}
selection_sort(arr,n--);

在您的函数上下文中(因为这是最后一条语句),这与完全相同

selection_sort(arr,n);

由于函数中未修改n,导致无限递归。你可能想要的是:

selection_sort(arr,n-1);

此外,这是错误的:

if (arr[max] == max)

您希望索引为i,而不是max

if (arr[i] == max)

很明显,这个语句

if(arr[max] == max){

无效。使用最大元素作为索引没有任何意义。我想你指的是下面的

int *max = max_element(arr,arr+n);
iter_swap( max, arr + n - 1 );