2012-03-29 17 views
5

配列を昇順で並べ替える宿題があります。明らかに、これはどんな種類のsort()機能も使用せずに手動で行うべきです。昇順で配列を手動で並べ替える

2つのループが必要です:最初のループは既存の配列をループし、配列の値とインデックスで一時的な値を作成します。 2番目のループは、一時的な値を既存の値と比較して並べ替えます。私はコードを書こうとしていますが、私はそれを正しく理解できないようです。私は、これは間違っている、誰かが正しい方向に私をプッシュすることができれば、それは非常に高く評価されるだろうかなり確信している

public int[] sortArray (int[] inArray) 
{ 
    //Construct the array we're using here 
    int[] newArray = inArray; 

    for(int x = 0; x < a.length; x++) //a.length = # of indices in the array 
    { 
     int tempValue = a[x]; 
     int tempIndex = x; 

     for(int y = 0; y < a.length; y++) 
     { 
      if(tempValue < a[y]) 
      { 
       newArray[x] = tempValue; 
      } 
     } 
    } 

    return newArray; 
} 

:ここで私が思いついた最新の方法があります!

+1

それはあなたが最初に別のソートアルゴリズムのためのいくつかの擬似コードを見て価値があるかもしれません:http://maven.smith.edu/~thiebaut/java/sort/ – Magrangs

+0

あなたがすることになっています特定のソートアルゴリズムを使用しますか? – twain249

+0

ソートアルゴリズムを考えるように明示的に求められていない限り、シンプルなアルゴリズムを見つけてコードに実装することをお勧めします。そして、あなたのコードが間違っていることを「確信」するのではなく、テストして調べるだけです。 – alexis

答えて

5

Selection SorterのほぼOKバージョンです。 yx+1で開始する必要があります。0では開始しません。それ以外の場合は、配列のソートされた部分を再スキャンします。また、選択ソートはインプレースアルゴリズムであることにも注意してください。アレイのコピーを作成する場合は、Arrays.copyメソッドを使用する必要があります。そうでない場合はint[] newArray = inArray; がコピーではなくエイリアスを作成しています。最後に、ネストされたループ内if文はスワップa[x]a[y]、単純にtempValueを入れないでください。

if(newArray[x] < newArray [y]) { 
    int tempValue = newArray[y]; 
    newArray[y] = newArray[x]; 
    newArray[x] = tempValue; 
} 
+0

スワップ部分について少し詳しく説明できますか? –

+1

@AndrewDeForest確かに、編集をご覧ください。 – dasblinkenlight

+0

'Arrays.copy'についてのヒントをありがとう!私はまあそれを見落としているが、それは私の問題だったことが判明:) –

1

の代わりに独自のソートアルゴリズムを考案しようと、私はすでに存在しているものを勉強するためにあなたを促すだろう。これに関する先行技術のトンがあります。

ウィキペディアの記事:Sorting algorithmを見てください。

Bubble sortは実装が非常に簡単ですが、2次的な複雑さ(現在の試行と同じ)があります。

Quicksortは実装するのが難しくありませんし、平均的な複雑性も優れています。

0

新しい配列を作成することは間違いなく必要な作業ではありません。 Googleが提供しているかチェックし、リストをソートする方法についていくつかのアイデアについては

https://www.google.com/webhp?sourceid=chrome-instant&ix=sea&ie=UTF-8&ion=1#hl=en&output=search&sclient=psy-ab&q=computer%20science%20list%20sorting&oq=&aq=&aqi=&aql=&gs_l=&pbx=1&fp=bda1eff6cc14f834&ix=sea&ion=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.,cf.osb&biw=1215&bih=679

1

あなたが達成しようとしている並べ替えがBubble sortと呼ばれる - Wikipediaのエントリはかなり良いです、あなたはすべきですそれを読んで。しかし、より良い選択肢があるので、実際には使用されていません。Insertion sort(例は、マージソートと挿入ソートのハイブリッドであるPythonのTimsortです)。これらの2つは、2つのループ、つまりO(n )の複雑さであなたの考えに合った基本的なアルゴリズムです。また、あなたの割り当てのための異なるアルゴリズムを検討するか、少なくとも、知っておくべき

はそれがお役に立てば幸いです。

0
int minval = input[0]; 
int temp=0; 


for(int i = 0; i< input.length; i++) 
{ 
    for(int j = 0; j< input.length-1; j++) 
    { 
     if(input[j+1]<input[j]) 
     { 
      temp=input[j+1]; 
      input[j+1]=input[j]; 
      input[j]=temp; 
     } 
    } 
} 
+2

コードを追加しないでください。あなたがしたことを説明してください – Jens

+0

何をしていますか? Minvalが使用されていません –

0
int arr[] = new int[]{10, 20, 5, 6, 30, 1, 2}; 
    boolean bool = true; 
    int t = 0; 
    while (bool) { 
     for (int i = 0; i < arr.length - 1; i++) { 
      if (arr[i] > arr[i + 1]) { 
       int c = arr[i]; 

       arr[i] = arr[i + 1]; 
       arr[i + 1] = c; 
       t++; 
      } 
     } 
     if (t == 0) { 
      bool = false; 
     } 
     t = 0; 
    } 

    for (int y : arr) { 
     System.out.println(y); 
    } 
+0

コードを追加しないでください。 – Jens

-1
int[] number = { 1,2,1,3,5,4 }; 
    int temp; 
    for (int i = 0; i < number.length; i++) 
     { 
      for (int j = i + 1; j < number.length; j++) 
      { 
       if (number[i] > number[j]) 
       { 
        temp = number[i]; 
        number[i] = number[j]; 
        number[j] = temp; 
       } 
      } 
     } 

     for (int i = 0; i <number.length; ++i) 
      System.out.println(number[i]); 
    } 
+1

コードを追加しないでください。説明を追加 – Jens

+2

ようこそスタックオーバーフロー!このコードは問題を解決するのに役立つかもしれませんが、質問に答えて_why_および/または_how_を説明しません。この追加の文脈を提供することは、長期的な教育的価値を大幅に改善するだろう。どのような制限や仮定が適用されるかなど、あなたの答えを解説してください。 –

関連する問題