2017-05-01 6 views
1

Ich gehe durch ein Beispiel einer Kursarbeit, die mir von einem Freund geschickt wurde, um mich für die Studienarbeit in meinem nächsten Jahr vorzubereiten. Ich habe versucht, ein Sortier- und Suchsystem zu erstellen, um verschiedene Daten zu verarbeiten. Für diese Aufgabe habe ich ein Merge-Sort-System erstellt, das meine Daten in aufsteigender Reihenfolge sortieren kann. Ich bin mir jedoch nicht sicher, wie ich diesen Algorithmus bearbeiten würde, damit er in absteigender Reihenfolge sortieren kann. Könnte irgendjemand erklären, wie das gemacht werden könnte? Der aktuelle Algorithmus behandelt Zeichenfolge Werte.Bearbeiten einer Zusammenführung Sortieren, um in absteigender Reihenfolge zu sortieren C#

Da dies auf einer Universitätsaufgabe basiert, muss ich selbst die Sortier- und Suchalgorithmen programmieren und nicht die integrierten Funktionen von Visual Studio verwenden.

static public void MainMerge<T>(T[] values, int left, int mid, int right) where T : IComparable<T> 
    { 
     int c = values.Length; 
     T[] temp = new T[c]; 
     int i, eol, num, pos; 

     eol = (mid - 1); 
     pos = left; 
     num = (right - left + 1); 

     while ((left <= eol) && (mid <= right)) 
     { 
      if (values[left].CompareTo(values[mid]) < 0) 
       temp[pos++] = values[left++]; 
      else 
       temp[pos++] = values[mid++]; 
     } 

     while (left <= eol) 
      temp[pos++] = values[left++]; 

     while (mid <= right) 
      temp[pos++] = values[mid++]; 

     for (i = 0; i < num; i++) 
     { 
      values[right] = temp[right]; 
      right--; 
     } 
    } 

    static public void SortMerge<T>(T[] values, int left, int right) where T : IComparable<T> 
    { 
     int mid; 

     if (right > left) 
     { 
      mid = (right + left)/2; 
      SortMerge(values, left, mid); 
      SortMerge(values, (mid + 1), right); 

      MainMerge(values, left, (mid + 1), right); 
     } 
    } 
+2

Wo vergleichen Sie die Zeichenfolgen? Wie funktioniert diese Codezeile? Wie würdest du diesen Vergleich invertieren? Das Beantworten jeder dieser Fragen gibt Ihnen Ihre Antwort. Wenn wir Ihnen sagen, hilft Ihnen das nicht auf lange Sicht. – Dukeling

Antwort

2

Sie brauchen nur das ändern: values[left].CompareTo(values[mid]) < 0 dazu: values[left].CompareTo(values[mid]) >= 0. Die Zusammenführungsphase ist die einzige Stelle, an der der Vergleich verwendet wird.

Sie können auch einen Komparator an Ihre Sortierfunktion übergeben, um ein benutzerdefiniertes Vergleichsprädikat zu ermöglichen.

Es gibt noch eine weitere Möglichkeit: Sie können Ihren aktuellen Algorithmus verwenden und das Ergebnis umkehren.

Verwandte Themen