であるため、RでMonte Carlo Quicksortアルゴリズムを作成しました。sample
関数は、各繰り返しで新しいピボットの位置を決定します。 私のクイックソート機能は、次のようになります。arr=sample(1:30, size=5)
これは私の関数呼び出しはの印刷と一緒に、次のようになります。予期しないクイックソート動作がR
quickSort=function(arr, left, right) {
i = left
j = right
pivot = arr[sample(left:right, size=1)]
while (i <= j) {
while (arr[i] < pivot)
i=i+1
while (arr[j] > pivot)
j=j-1
if (i <= j) {
tmp = arr[i]
arr[i] <<- arr[j]
arr[j] <<- tmp
i=i+1
j=j-1
}
}
if (left < j)
quickSort(arr, left, j)
if(i < right)
quickSort(arr, i, right)
}
はテスト目的のために、私は、スクリプトの実行ごとにいくつかのランダムな値を持つベクトルを初期化しますベクトル:
quickSort(arr, 1, 5)
print(arr)
私はVisual Studio(もちろんC++で書かれています)でアルゴリズムをテストしたところ、毎回期待通りの結果が得られました。私はRで推測していますが、私はベクトルをグローバルに変更することについて何か間違っていますが、私はそれを理解することはできません。私はあなたに何か考えがあることを望んでいます。