2014-10-29 3 views
-3

Я использую следующую quicksort в скрипте c-99.Использование quicksort в 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') –

+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 Я вижу, что мой второй цикл цикла должен быть i <5, потому что массивы начинаются с нуля, спасибо за указание на мои различные ошибки –

Смежные вопросы