クイック ソート アルゴリズムを実装しましたが、テストしたところ、入力配列の最初の要素 (ピボットを取得した要素) に最大の要素がある場合に失敗することがわかりました。これが私のコードです:
void partition(int *a,int size){
if(size<=1){return;}
int pivot=a[0];
int left=0,right=0;
for(left=1,right=size-1;left<=right;){ //was size-1
if(a[left]>=pivot&&a[right]<=pivot) {
swap(left,right,a);
}
if(a[left]<pivot){left++;}
if(a[right]>pivot){right--;}
}
swap(0,right,a);
partition(a,right-1);
partition(&(a[right+1]),size-right-1);
}
失敗するいくつかのサンプル:
I/P 245 111 32 4
O/P 4 111 32 245 `
I/P 154 11 43 3 7
O/P 7 11 43 3 154
私が犯した可能性のある間違いは何ですか?