私が見たYouTubeのアルゴリズムの視覚的なプレゼンテーションからクイックソートアルゴリズムを作成しましたが、再帰はまったく機能しません。:(これらの2行をコメントアウトすると、
quicksort(array,0,start-1);
quicksort(array,start+1,temp);
.. プログラムはクラッシュせず、出力は部分的に正しい 2,1,3,5,4 になります.. しかし、再帰に入るとクラッシュします。whileループ全体の後、開始は終了と同じになります..
#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();
}