2017-05-01 3 views
1

私は、来年に大学の教授のために準備をするために、友人から送られたサンプルの授業を進んでいます。私は分類されたデータを処理するソートと検索システムを作成しようとしています。このタスクでは、データを昇順でソートできるマージソートシステムを作成しました。しかし、私はこのアルゴリズムをどのように編集して降順でソートできるかは不明です。誰でもこのことがどうやってできるのか説明できますか?マージソートを編集して降順にソートするC#

現在のアルゴリズムは文字列の値を処理します。

これはUniversityのタスクに基づいているため、ソートと検索のアルゴリズムを実際にコーディングし、Visual Studioで使用可能な組み込み関数を使用する必要はありません。

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

ここで文字列を比較しますか?そのコード行はどのように機能しますか?あなたはその比較をどのように逆転させるでしょうか?それらの質問のそれぞれに答えることであなたの答えが得られます。長期間に渡って、皆さんを助けてくれるわけではありません。 – Dukeling

答えて

2

は、あなただけのこれを変更する必要があります:values[left].CompareTo(values[mid]) < 0これに:values[left].CompareTo(values[mid]) >= 0。マージフェーズは、比較が使用される唯一の場所です。

また、コンパレータをソート関数に渡して、カスタム比較述部を許可することもできます。

もう1つの方法があります:現在のアルゴリズムを使用して結果を逆転することができます。

関連する問題