2016-10-23 4 views
-2

を並べ替え:Javaの始まり:これは書き出さソート方法の一例である方法の説明

for(int s = i+1; s<myArray.length; s++){ 
     if(myArray[i] > myArray[s]){ 
      sorting = myArray[i]; 
      myArray[i] = myArray[s]; 
      myArray[s] = sorting; 
     } 
    } 

int sorting = 0; 
    for(int i = 0; i<myArray.length-1; i++){ 
     for(int s = i+1; s<myArray.length; s++){ 
      if(myArray[i] > myArray[s]){ 
       sorting = myArray[i]; 
       myArray[i] = myArray[s]; 
       myArray[s] = sorting; 
      } 
     } 
    } 

私はの一部のような、それの部分を理解していません

誰かが自分の時間をとり、全体のプロセスを説明することができますか?なぜmyArray [s]はソートに初期化されていますか?

とても抽象的なので、私は本当に混乱してしまいます。誰も助けることができますか?それは、最小から最大までの数値をソートすることになっています。

PS:forループでは、1番目の番号と2番目以降の番号を比較していることを理解しています。しかしそれ以降、把握するのは少し難しいようです。

+0

ここからバブルソートのように見えます。 *非常に非効率な並べ替え。それ以上の詳述は、実際にはアルゴリズムブックまたはWikipediaのいずれかをコピーすることです。 – Makoto

+0

ええ、私は初心者ですから、私は物事の効率にはまったく関心がありません。それが動作するように、私はそれが何をするのかを知っています。誰でも説明できますか? –

+0

真実ですこれは簡単なgoogle検索で簡単に見つけられるものです[これは多くのものの1つです](https://www.tutorialspoint.com/data_structures_algorithms/bubble_sort_algorithm.htm) – JohnG

答えて

1

はたぶん、この説明は

ループ不変のに役立ちます:I点で最大の要素 - 1がソートされて、私はすべての 以上あるから

// "The elements upto -1 (=none) are sorted, from 0 are all greater or equal" 
for (int i = 0; i < myArray.length-1; i++){ 

    // The elements upto i-1 are sorted, from i are all greater or equal 
    for (int s = i+1; s < myArray.length; s++) { // For the elements after i 
     if (myArray[i] > myArray[s]) { // If there is a smaller one 
      // Swap the elements at i and s: 
      int oldValueAtI = myArray[i]; 
      myArray[i] = myArray[s]; 
      myArray[s] = oldValueAtI; 
     } 
    } 
    // myArray[i] is smallest for s > i 
    // The elements upto i are sorted, from i+1 are all greater or equal 
} 
// The elements upto s.length - 1 are sorted, 
// from s.length (=none) are all greater or equal 

// All elements are sorted 

だから、あなたも可能性物事を単純化し、スワップを少なくする:

for (int i = 0; i < myArray.length-1; i++){ 
    // Search the smallest in the rest: 
    int smallestS = i; 
    for (int s = i+1; s < myArray.length; s++) { 
     if (myArray[s] < myArray[smallestS]) { 
      smallestS = s; 
     } 
    } 
    // Swap the elements at i and smallestS 
    if (smallestS != i) { // Check not needed 
     int oldValueAtI = myArray[i]; 
     myArray[i] = myArray[smallestS]; 
     myArray[smallestS] = oldValueAtI; 
    } 
} 
+0

私はそれを覚えておきます。 –

関連する問題