私は見たyoutubeのアルゴリズムの視覚的な提示からクイックソートアルゴリズムを作りましたが、私の再帰は全く機能しません。私は、これらの2行をコメントアウトした場合:( クイックソートアルゴリズム(再帰)
quicksort(array,0,start-1);
quicksort(array,start+1,temp);
は..プログラムがクラッシュしないと出力は、部分的に正しいです2,1,3,5,4となります..しかし、それは入ったときにそれがクラッシュします再帰クラッシャーへ
#include <stdio.h>
#include <conio.h>
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
void quicksort(int *array, int start, int end){
int pivot = start;
int temp = end;
while(start != end){
if(pivot==start){
if(array[pivot] > array[end]){
swap(&array[end],&array[pivot]);
pivot = end;
start++;
}
else
end--;
}
else{
if(array[pivot] < array[start]){
swap(&array[start],&array[pivot]);
pivot = start;
end--;
}
else
start++;
}
}
quicksort(array,0,start-1);
quicksort(array,start+1,temp);
}
main(){
int x[5] = {3,1,5,2,4};
int i;
quicksort(x,0,4);
for(i=0;i<5;i++)
printf("%d ", x[i]);
getch();
}
私はIF(開始==端)リターンを加え ..コードの改正を行いました。 //終了条件の場合。しかし、quicksort(array、start + 1、temp)である2回目の再帰に入るとエラーに遭遇します。 – Xegara