2013-12-09 4 views
-1

내 재귀 선택 정렬 함수로 오류가 발생하는 것 같습니다. 이 짐승을 고치는 데 도움이된다면 도움이 될 것입니다.C에서 재귀 선택 정렬

#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

이 문

if(arr[max] == max){ 

가 무효 인 것은 분명하다. 최대 요소를 색인으로 사용하는 것은 의미가 없습니다. n 때문에 무한 재귀를 선도

selection_sort(arr,n); 

: 나는 (이 마지막 문이로)이 정확히과 동일 함수의 맥락에서 다음과 같은

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

또한 이미 지적한대로 selection_sort (arr, - n); –

3
selection_sort(arr,n--); 

을 의미 생각 함수에서 수정되지 않았습니다. 당신이 아마 원하는 것은 이것이다 : 또한

selection_sort(arr,n-1); 

, 이것은 잘못된 것입니다 :

if (arr[max] == max) 

당신은 인덱스가 i하지 max되고 싶어요.

if (arr[i] == max)