2014-10-29 4 views
-3

나는 c-99 스크립트에서 다음 quicksort를 사용하고 있습니다.c-99의 quicksort 사용

문제는 컴파일되지만 출력이없는 것입니다. 나는 1,2,3,4,5로 5,4,3,2,1을 정렬하려고 노력하고 있는데, 나는 아무것도 얻을 수 없다.

내가 잘못하고있는 것이 확실하지 않습니다.

이 내 코드

\\pick a pivot 
\\make a temporary left and right list 
\\filter items to left and to the right 
\\put it all back into the array left and pivot 
\\recurse right side 


#include <time.h> 
#include <stdlib.h> 

void subquicksort(int array[], int start, int end){ 

    int leng=end-start; 
    if (leng<=1){ 
     return; 
    } 

    int pivot=array[start]; 
    int leftlist[leng];  \\create temporary left and right list 
    int lindex=0; 
    int rightlist[leng]; 
    int rindex=0; 

    for(int i=start + 1; i < leng; i++){ 

     if(array[i]<pivot) { 
      leftlist[lindex++]=array[i]; 
     } 
     else{ 
      rightlist[rindex++]=array[i]; 
     } 
    } 

    array[start + lindex]=pivot; 

    for(int i=start +1; i <leng; i++){ 

     if (i<lindex){ 
      array[start + i]=leftlist[i]; 
     } 
     if(i==lindex){ 
      continue; 
     } 
     if(i>lindex){ 
      array[start + i]=rightlist[i-lindex-1]; 
     } 
    } 

    subquicksort(array,start,start+lindex); 
    subquicksort(array,start+lindex+1,end); 
} 

void quicksort(int array[],int leng){ 
    subquicksort(array,0,leng); 
} 



int main(){ 

    int nums[] = {5,4,3,2,1}; 
    quicksort(nums, 5); \\use the quicksort function and print out the values sorted 
    for(int i=0;i<6;i++){ 
     printf("%d",nums[i]); 
    } 
    return 0; 
} 
+0

사용 할 것을 * 표준 * (15.3 세)] (http://man7.org/linux/man-pages/man3/qsort.3.html). 숙제 인 경우 : 모든 경고 및 디버그 정보 ('gcc -Wall -Wextra -g')로 컴파일 한 다음 ** 디버거를 사용하십시오 ** ('gdb') –

+3

코드를 포맷하십시오. –

+2

예, 코드가 눈에 매우 어렵습니다. – LeatherFace

답변

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

void subquicksort(int array[], int start, int end){ 
    int leng=end-start; 

    if(leng<=1){ 
     return; 
    } 

    int pivot=array[start]; 
    int leftlist[leng]; 
    int lindex=0; 
    int rightlist[leng]; 
    int rindex=0; 

    for(int i=start + 1; i < end; i++){ 
     if(array[i]<pivot) { 
      leftlist[lindex++ ]=array[i]; 
     } else { 
      rightlist[rindex++]=array[i]; 
     } 
    } 

    array[start + lindex]=pivot; 

    for(int i=0; i < lindex; i++) 
     array[start + i]=leftlist[i]; 
    for(int i=0; i < rindex; i++) 
     array[start + lindex + 1 + i]=rightlist[i]; 

    subquicksort(array,start,start+lindex); 
    subquicksort(array,start+lindex+1,end); 
} 

void quicksort(int array[],int leng){ 
    subquicksort(array,0,leng); 
} 

int main(){ 
    int nums[] = {5,4,3,2,1}; 
    quicksort(nums, 5); 
    for(int i=0;i<5;i++){ 
     printf("%d ",nums[i]); 
    } 
    return 0; 
} 
+0

코드를 풀었을 때 코드 만 싫증납니다. 나는 변화된 것을 즉시 발견하는 것이 어렵다는 것을 발견했습니다. 귀하가 변경 한 모든 내용이 있다면 귀하의 의견을 답변에 복사해야합니다. –

+0

@MooingDuck 이미 문제 (예 : 수정 사항)에 대해 의견을 남깁니다. 원본 코드를 인용하기에는 너무 가혹했습니다. – BLUEPIXY

+0

@BLUEPIXY 배열이 제로에서 시작하기 때문에 나의 제 2 초 루프는 i <5이어야합니다. 제 다양한 오류를 지적 해 주셔서 고마워요. –