在C ++中递归选择排序

时间:2013-12-09 20:57:25

标签: c++ sorting recursion

我似乎在使用递归选择排序函数时产生错误。任何帮助都将在修复这个野兽时受到赞赏。

#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--);
}

2 个答案:

答案 0 :(得分:3)

selection_sort(arr,n--);

在你的函数的上下文中(因为这是最后一个语句),这与:

完全相同
selection_sort(arr,n);

导致无限递归,因为n未在函数中修改。您可能想要的是:

selection_sort(arr,n-1);

另外,这是错误的:

if (arr[max] == max)

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

if (arr[i] == max)

答案 1 :(得分:2)

很明显,这句话

if(arr[max] == max){

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

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