Я использую следующую 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;
}
Используйте * стандартный * [QSort (3)] (http://man7.org/linux/man-pages/man3/qsort.3.html). Если это домашняя работа: скомпилируйте все предупреждения и отладочную информацию ('gcc -Wall -Wextra -g'), затем ** используйте отладчик ** (' gdb') –
Отформатируйте свой код. –
Да, ваш код очень сложный на глазах. – LeatherFace