私はCの初心者で、引数としてランダムに生成された実数配列とそのサイズを取るQuicksortプログラムをコーディングしようとしていましたが、要素を昇順にソートしています。サブ配列A [0 ... q-1]を表すための関数QuickSortの最初の再帰呼び出しで、配列サイズフィールドに何を入れるべきか分かりません。限り、乱数を生成するドライバプログラムにリンクすると、プログラムは誤った順序で要素を返すので、コードの残りの部分は問題ありません。私は助言/提案を感謝します。正しく分割されたQuickSort配列
A[i]=something;
A[i]
とsomething
を交換して:あなたは唯一の問題だ
int Partition(float *,int);
int QuickSort(float *A,int n)
{
int q;
if(n>1){
q = Partition(A,n);
QuickSort(&A[],q); //Trying to figure out what to put in here.
QuickSort(&A[q+1],(n-1)-q); //This recursion sends the subarray A[q+1...n-1] to QuickSort, I think it works fine.
}
}
int Partition(float *A,int n){
int i,j;
float x;
x = A[n-1];
i=0;
for(j=0;j<=n-2;j++){
if(A[j] <= x){
A[i]=A[j];
i = i+1;
}
}
A[i]=A[n-1];
return i;
}
欠落した添字として0を使用してください。 –
えーと、それは近いです、サブアレイは正しくソートされますが、全体の配列はソートされません。それは次のようになります。 A [0] = 0.197551 A [1] = 0.277775 A [2] = 0.277775 A [3] = 0.277775 A [4] = 0.553970 A [5] = 0.197551 A [ 6] = 0.277775 A [7] = 0.277775 A [8] = 0.553970 A [9] = 0.553970 – Stavo
基本的な配列印刷機能を追加した場合は、 'Partition() '入国時と退場時に。それを行うと、パーティション化コードがアレイを完全に壊していることがわかります。前後の内容は同じではありません。例えば、私は 'P1(5): [0] = 0.197551 [1] = 0.277775 [2] = 0.277775 [3] = 0.277775 [4] = 0.197551' - ' P2(5): [0]添字 '[1]'の値が0.277775から0.197551に変化した場合、0.197551 [1] = 0.197551 [2] = 0.277775 [3] = 0.277775 [4] = 0.197551'となる。要素を移動するだけでなく、スワップする必要があります。 –