2014-12-15 4 views
2

모든 인덱스에 대한 작업 만 몇을 위해 잘 작동되지 않습니다. 친절하게 나를 잘못 인도하고있는 곳으로 인도합니다.내가 많은 K 값에 대해 다음 링크 <a href="http://www.cs.yale.edu/homes/aspnes/pinewiki/QuickSelect.html" rel="nofollow">http://www.cs.yale.edu/homes/aspnes/pinewiki/QuickSelect.html</a></p> <p>그러나 프로그램이 충돌에 주어진 알고리즘에 대한 참조를 선택 신속하게 구현하기 위해 노력하고

#include <stdio.h> 
#include <stdlib.h> 

int a1[10]; 
int a2[10]; 

int quickselect(int a[], int k,int len){ 
     int r = rand()%(len-1); 

     int pivot = a[r]; 
     int i =0; 
     int len1=0,len2=0; 
     for(i=0 ;i<len;i++){ 
     if(a[i]<pivot) 
      a1[len1++]=a[i]; 
     else if(a[i]>pivot) 
      a2[len2++] = a[i]; 
     else 
      continue; 
    } 

    if(k<=len1) 
     return quickselect(a1, k,len1); 
    else if (k > len-len2) 
     return quickselect(a2, k - (len-len2),len2); 

    return pivot; 

} 
int main() 
{ 
    int a[7] = {8,3,2,6,1,9,5}; 
    int val = quickselect(a,3,7); 
    printf("%d \n",val); 

    return 0; 
} 

답변

1

나는 당신의 코드를 테스트했다. 나는 len==1 때 부동 소수점 예외를 얻을 것이기 때문에 int r = rand()%(len-1)int r = rand()%len으로 변경해야한다고 생각합니다.

+0

나는 그것이 오는 것을보고, 완벽하게 작동합니다. 그것을 지적 해 주셔서 감사합니다. – user2805439