2016-04-05 5 views
1

Ich habe diesen Blasensortieralgorithmus, der "arr1" sortiert.C# 3 Arrays mit Blasensortierung sortieren

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; 
} 

Ich möchte 3 verschiedene Arrays mit diesem Algorithmus, die sie miteinander vergleichen.

für z.B.

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

Wenn ich diese Arrays hatte und ich ARR1 aufsteigend sortiert, möchte ich das Ergebnis wie folgt aussehen:

Ergebnis:

arr1 Monate Num

2016 1. Dezember

2014 Mai 3

2012 September 12

1931 5. März

1930 10. Januar

+4

Warum nicht von 'DateTime'? –

+2

Obwohl @SamIam sehr korrekt ist, wenn Sie sagen, dass, wenn Sie mit dieser Datenstruktur bleiben MÜSSEN, wenn Sie sagen 'arr1 [j1 + 1] = arr1 [j1]; 'können Sie nicht auch nur da in' Monate [j1 + hinzufügen 1] = Monate [j1]; 'und' Num [j1 + 1] = Num [j1]; 'sowie das Speichern von zwei weiteren Temp-Werten' temp2 = Monate [j1 + 1] 'und' temp3 = Num [j1 + 1] ' –

+0

Ein Datum in 3 Felder aufgeteilt zu haben, erscheint mir wirklich widersinnig. Sie können sich diese große Sortierfunktion sparen und mit dem was @SamIam sagt, gehen. – rinukkusu

Antwort

0

Wenn Sie daran interessiert sind, dies für Ihre Arbeit oder Nebenprojekt nützlich zu machen, würde ich vorschlagen, DateTime zu verwenden. Es wird alle Dinge enthalten, die Ihnen wichtig sind, und vieles mehr. Sie können auch Sie Sort() oder .orderBy(..) in Arrays.


Aber, wenn Sie bei der tatsächlichen Umsetzung Ihrer Sache interessiert sind, im Interesse einer Übung, müssen wir einige Annahmen haben.

  • All 3-Arrays ist von der gleichen Größe
  • Sie wirklich nur über anfänglichen Indizes dieses Arrays sorgen, und nicht tatsächlich jedes Array zu sortieren. Dies ergibt sich aus Ihrem Beispiel

Sie sollten also 2d-Array oder ein Array von KeyValue-Paaren verwenden. Einer wird dein Jahr sein, ein anderer wird einen Anfangsindex haben.
Dann, wenn Sie fertig mit der Sortierung Ihres Arrays von Jahren, können Sie die ersten Indizes der Werte von Jahren betrachten, und greifen Elemente dieses Indexformulars Array von Monaten und Array von Tagen.

Eine andere Idee: Sie können die 3-Arrays halten wie es ist, aber wenn Sie eine swap von Indizes der Jahre Array tun, eine Swap der anderen beiden Anordnungen tun. Stellen Sie nur sicher, dass Sie nur eine Überprüfungsbedingung für das Swam from Years-Array verwenden. Auf diese Weise sortieren Sie beim Sortieren des Years-Arrays auch die anderen beiden Arrays nach Years-Array-Indizes. Ihr Code:

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

Sollte someting wie dieses nur 1-Array verwenden

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

Wenn Sie damit durchkommen können, sollten Sie verwenden nur 1-Array von DateTime

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

Wenn Sie aus irgendeinem Grund Tu das nicht, weil dies Hausaufgaben sind, dann wäre die nächstbeste Sache, deine eigene Klasse zu bilden, die ein Jahr, einen Monat und einen Tag hat, und eine Methode einzuschließen, die einen Vergleich für dich macht.

Verwandte Themen