我似乎在使用递归选择排序函数时产生错误。任何帮助都将在修复这个野兽时受到赞赏。
#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--);
}
答案 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 );