2014-10-29 73 views
-3

我在c-99腳本中使用以下快速排列。在c-99中使用快速排列

問題是它編譯但它沒有任何輸出。我試圖把5,4,3,2,1分成1,2,3,4,5,我什麼也沒得到。

我不知道我在做什麼不正確。

這是我的代碼

\\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

使用*標準* [的qsort(3)](http://man7.org/linux/man-pages/man3/qsort.3.html )。如果它是作業:編譯所有警告和調試信息('gcc -Wall -Wextra -g')然後**使用調試器**(''gdb') – 2014-10-29 20:46:38

+3

格式化您的代碼。 – 2014-10-29 20:47:09

+2

是的,你的代碼在眼睛上非常困難。 – LeatherFace 2014-10-29 20:47:45

回答

-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

儘管您可能已經解決了這個問題,但只有代碼纔會回答這個問題,而且這個時間足夠長我發現很難立即發現變化。如果這些都是你改變的,你應該把你的評論複製到答案中。 – 2014-10-29 22:06:22

+0

@MooingDuck已經對問題進行了評論(即修復)。太嚴重了,不能引用原始代碼。 – BLUEPIXY 2014-10-29 22:16:11

+0

@BLUEPIXY我看到是我的第二個循環應該是我<5,因爲數組從零開始,謝謝指出我的各種錯誤 – 2014-10-29 22:42:07