2017-09-09 1 views
0

私はCでかなり初心者です。私の教授のやり方でバブルソートを変更する方法については、望む。バブルソートをランダムな倍数の配列に対して非常に特殊な方法で修正しようとしています

私たちがやっているのは、ランダムな値を持つdouble型の配列を作成し、その配列をいくつかのソート方法を使って新しい配列にコピーしソートすることです。

私は配列と乱数を下げましたが、このバブルソートを正しく修正したかどうかはわかりません。割り当ての説明は次のようになります。

変更されたバブルソートには、内側ループと外側ループが含まれます。 Nをソートする配列内の要素の数である、 1 - アウターループは、(iは議論のために、からN にそのカウンタ/インデックスをインクリメント。内部ループは、I + から1 Nからそのカウンタ/インデックスをインクリメントし、iは範囲内の最小の要素を識別するためにで配列要素に対して、その範囲内の各要素をテストします。この内側のループが終了した後、位置に比べて小さい元素iはが見つかった場合、依然として外部ループにある間、その位置での値がでの値と交換されるI、そうでなければアクションなし必要に応じて外側のループが繰り返されます。

これは、バブルソートのために私のコードです:

for (i = 0; i < n - 1; i++) 
{ 
    for (j = i + 1; j < n; j++) 
    { 
     if (arrayB[j] < arrayB[i]) 
     { 
      value = arrayB[i]; 
      arrayB[i] = arrayB[j]; 
      arrayB[j] = value; 
     }        
    } 
} 

このコードは正しく配列をソートしますが、それは普通のバブルソートだかIのでので、それはだ場合、私は言う方法がわかりません私が想定していたようにそれを修正しました。バブルソートがC言語でどのように見えるのかわからないので、これが修正版であるかどうかはわかりません。

私も、これは、NOT C++のコードが、すべてのヘルプは大歓迎され、昔ながらのC.

ことになっていることを明らかにしたいと思います!

+0

説明文の選択ソートのようなものですが、コードはバブルソートのようなものです –

答えて

0

説明に基づいて、私はあなたが必要と思うのはselection sortだと思います。

スワッピングが行われたバブルソートの場合とは異なり、順序のずれた偶数の偶数に遭遇する瞬間に、外側ループの反復のために最大で1回スワップされます。

arrayB[i]より小さい値でインデックスを格納するには、smallIndexのような変数が必要です。 必要に応じてsmallIndexの値が変更される内部ループを入力する前に、この変数に値iを与えます。

smallIndex

arrayB[i]arrayB[smallIndex]を交換依然としてiとならない場合は、内側ループの外になく、外部ループの現在の反復の終了前に来た後、チェック。

コードを使用すると、内側のループでスワップをやっているので、あなたのコードは、通常のバブルソートで

for (i = 0; i < n - 1; i++) 
{ 
    smallIndex = i; 
    for (j = i + 1; j < n; j++) 
    { 
     if (arrayB[j] < arrayB[smallIndex]) 
     { 
      smallIndex=j; 
     } 
    } 
    if(smallIndex!=i) 
    { 
     value = arrayB[i]; 
     arrayB[i] = arrayB[smallIndex]; 
     arrayB[bigIndex] = value; 
    } 
} 
+1

ありがとう、これは非常に役に立ちました! –

0

等であってもよいです。

のインナーループが完了した後に、スワップを行うことになっています。内側のループは、ちょうどi to nの範囲で最小の要素を見つけるはずです。次に、内部ループが完了したら、その要素をiと入れ替えます。

for (i = 0; i < n - 1; i++) 
{ 
    int smallest_index = i; 
    int smallest = arrayB[i]; 
    // find smallest element in range [i, n) 
    for (j = i + 1; j < n; j++) 
    { 
     if (arrayB[j] < smallest) 
     { 
      smallest = arrayB[j]; 
      smallest_index = j; 
     } 
    } 
    // swap it with i if necessary 
    if (smallest_index != i) { 
     arrayB[smallest_index] = arrayB[i]; 
     arrayB[i] = smallest; 
    } 
} 
関連する問題