2016-04-05 13 views
1

私はこのバブルソートアルゴリズムを使って "arr1"をソートしています。C#3つの配列をバブルソートで並べ替えます。

static int yearAscDes(int value)` 
    { 
if (value == 0) 
{ 
      int[] arr1 = { 1930, 1931, 2016, 2014, 2012 }; 
      int temp1 = 0; 

      for (int i1 = 0; i1 < arr1.Length; i1++) 
      { 
       for (int j1 = 0; j1 < arr1.Length - 1; j1++) 
       { 
        if (arr1[j1] < arr1[j1 + 1]) 
        { 
         temp1 = arr1[j1 + 1]; 
         arr1[j1 + 1] = arr1[j1]; 
         arr1[j1] = temp1; 
        } 
       } 
      } 

      for (int i1 = 0; i1 < arr1.Length; i1++) 
      { 

       Console.Write(arr1[i1] + " \n"); 
      } 
      return 0; 
} 

このアルゴリズムを使って3つの異なる配列を並べ替えることをお奨めします。

int[] arr1 = {1930, 1931, 2016, 2014, 2012}; 
string[] Months = {"Jan", "March", "Dec", "May", "Sept"}; 
int[] Num = {10, 5, 1, 3, 12}; 

私はこれらの配列を持っていた私は、ソートの昇順でARR1場合、私は結果は次のようになりたい:

結果:

ARR1ヶ月間のNum

2016 12月1日

2014 5月3

2012年9月12日

1931 3月5日

1930 1月10日

+4

のようにいろいろ書いべきか? –

+2

@SamIamはこのデータ構造に固執しなければならないと言っても間違いありませんが、 'arr1 [j1 + 1] = arr1 [j1];と言ったときに' Months [j1 + temp2 = Months [j1 + 1]およびtemp3 = Num [j1 + 1] = Num [j1];およびNum [j1 + 1] = Num [j1] 1] ' –

+0

日付が3つの配列に分割されているのは、わたしにとっては直感的ではないようです。その巨大な並べ替え機能を自分自身で保存して、@ Samamが言っていることと一緒に行くことができます。 – rinukkusu

答えて

0

あなたの仕事や側面のプロジェクトに役立てたい場合は、DateTimeを使用することをお勧めします。それはあなたが心配しているものすべてを保持します。アレイ内にSort()または.orderBy(..)もできます。


しかしあなたはあなたのものの実際の実装に興味があるならば、運動のために、我々は仮定のカップルを持っている必要があります。

  • すべての3の配列は、あなたが本当に唯一の初期これらの配列のインデックス、そして実際に各配列をソートしない気に
  • 同じサイズのものです。これはあなたの例に由来します

したがって、2次元配列またはKeyValueペアの配列を使用する必要があります。 1つはあなたの年、もう1つは初期のインデックスを保持します。
次に、年の配列のソートが完了したら、年の値の最初のインデックスを調べ、そのインデックスの要素を取得すると、月と配列の配列が形成されます。

別の考え方: 3つの配列をそのまま使用できますが、年の配列のインデックスを作成するときは、他の2つの配列を入れ替えます。 Years配列のスワムにのみチェック条件を使用するようにしてください。このようにYears配列がソートされると、Years配列インデックスに従って他の2つの配列もソートされます。 あなたのコード:なぜ、ちょうどDateTime` `の1つのアレイを使用しない

if (arr1[j1] < arr1[j1 + 1]) 
{ 
    temp1 = arr1[j1 + 1]; 
    arr1[j1 + 1] = arr1[j1]; 
    arr1[j1] = temp1; 
} 

この

if (arr1[j1] < arr1[j1 + 1]) 
{ 
    temp1 = arr1[j1 + 1]; 
    arr1[j1 + 1] = arr1[j1]; 
    arr1[j1] = temp1; 

    tempMonths = months[j1 + 1]; 
    months[j1 + 1] = months[j1]; 
    months[j1] = tempMonths; 

    tempDays = days[j1 + 1]; 
    days[j1 + 1] = days[j1]; 
    days[j1] = tempDays; 
} 
4

あなたはそれを離れて得ることができる場合、あなたならば、あなたはいくつかの理由でDateTime

DateTime[] dt = {new DateTime(1930, 1, 10), new DateTime(1931, 3, 5) /*...*/}; 

のちょうど1アレイをすることができます使用する必要がありますこれは宿題なので、それをしないと、次に一番良いのは1年、1ヶ月、1日のクラスを作って比較する方法です。