0

ランダムピボットを使用してクイックソートを実装しようとしています

void QuickSort(int *arr,int left,int right){

if(right-left+1 > 2){

    int i = 0,storeIndex = left;
    int pivot = left + (int)(rand() % (right-left+1));

    swap(&arr[pivot],&arr[right]);

    for(i = left; i < right; i++){

        if(arr[i] < arr[right]){
            swap(&arr[i],&arr[storeIndex]);
            storeIndex++;
        }
    }

    swap(&arr[storeIndex],&arr[right]);
    QuickSort(arr,left,storeIndex-1);
    QuickSort(arr,storeIndex+1,right);
  }
}

しかし、これは次のように不適切にソートされた出力を提供しています

未ソート: [81,87,47,59,81,18,25,40,56,0]

並べ替え: [0,18,25,40,56,47,59,81,87,81]

Pythonで同様のものがうまく機能したため、私のアルゴリズムに何か問題があります

4

2 に答える 2