2017-11-14 9 views
0

私はHeapSort Algorythmを擬似コードを使って作成しなければなりません(heaportのみ)。そして、私は入力と出力ファイルを使用する必要があります。しかし、今のところ私はtxtファイルを読み込んでコンソールにすべての数字を書き込むので、うまくいきます。だから問題は、メインに何も変わらないソートメソッドを追加した後です。また、すべてのメソッドをテストすることにしました。それらのメソッドはすべて、一度、数値を書き留めています。それはそれです。私は並べ替えにはあまりよくないので、問題を見つけるのは難しいです。また、擬似コードからのものであるため、私は自分自身で行うことができるコードを使用する必要はありませんでした。だからあなたはソートが起こらないということが原因で何が起こるのか知っていますか?HeapSort Algorythmからtxtファイルを配列のリストに並べ替えることはできません

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Microsoft.Win32; 
using System.IO; 
using System.Windows.Forms; 
namespace Zad4 
{ 
    class Program 
    { 
     void Heapify(List<int> array, int i, int n) 
     { 
      int largest, temp; 
      int parent = i; 
      int left = 2 * i + 1; 
      int right = 2 * i + 2; 

      if (left < n && array[left] > array[parent]) 
      { 
       largest = left; 
      } 
      else 
      { 
       largest = parent; 
      } 

      if (right < n && array[right] > array[largest]) 
      { 
       largest = right; 
      } 
      if (largest != i) 
      { 

       temp = array[i]; 
       array[i] = array[largest]; 
       array[largest] = temp; 

       Heapify(array, largest, n); 
      } 

     } 

     void BuildHeap(List<int> array, int n) 
     { 
      int i; 
      for (i = (n - 1)/2; i >= 0; i--) 
      { 
       Heapify(array, i, n); 
      } 

     } 

     void HeapSort(List<int> array, int n) 
     { 
      int i, temp; 
      for (i = n - 1; i >= 0; i--) 
      { 
       temp = array[0]; 
       array[0] = array[n - 1]; 
       array[n - 1] = temp; 

       n = n - 1; 

       Heapify(array, 0, n); 
       Console.WriteLine(string.Join(" ", array)); 
      } 
     } 

     static void Main(string[] args) 
     { 
      int n = 0; 
      Program A = new Program(); 

      StreamReader myFile = 
       new StreamReader("C:\\Users\\dawid\\Desktop\\C#\\Heapsort\\dane.txt"); 
      string myString = myFile.ReadToEnd(); 

      myFile.Close(); 

      char rc = (char)10; 
      String[] listLines = myString.Split(rc); 
      List<List<int>> listArrays = new List<List<int>>(); 
      for (int i = 0; i < listLines.Length; i++) 
      { 
       List<int> array = new List<int>(); 
       String[] listInts = listLines[i].Split(' '); 
       for (int j = 0; j < listInts.Length; j++) 
       { 
        if (listInts[j] != "\r") 
        { 
         array.Add(Convert.ToInt32(listInts[j])); 
        } 
       } 
       listArrays.Add(array); 

       A.BuildHeap(array, n); 
       A.HeapSort(array, n); 
      } 

      foreach (List<int> array in listArrays) 
      { 
       foreach (int i in array) 
       { 
        Console.WriteLine(string.Join(" ", array)); 
       } 
      } 
      Console.WriteLine(); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

使用ブレークポイントを、あなたのコードがやっていると、なぜあなたのソートが機能していないかを確認しようと、それは、私はあなたを与えることができる最高のアドバイスです今すぐテストする方法がありません – Gianlucca

+0

私はわずかな変更でプログラムをテストしました。 txtファイルから数値を取る代わりに、ランダムな要素を持つint配列を作成しました。 A.BuildHeap(array、n); A.HeapSort(配列、n);私はそれをしました: A.BuildHeap(array、array.Length); A.HeapSort(array、array.Length);実際にはうまくいきましたが、リスト(array.Count)で同じことをしてもうまくいきませんでした。どんな魂? –

+0

私が言っていたことは:ブレークポイントを使って各変数が保持している値(これはデバッグと呼ばれています)を調べるか、必要に応じてConsole.Write(追跡したい変数)を使って記録します。ループの内側にあり、コード内で何が起こっているのかを知ることができます。 – Gianlucca

答えて

0

だから、私が見つけた解決策はちょうど私が私のtxtファイルを読んで、最も重要なのは、私の方法を悪用した方法を変えています。だからそれは今どのように見え、それはうまく整列しています。たぶん私は自分で答えを得たので質問してはいけません。しかしよく。そこあなたが行く:あなたのコードは私が読むことのためには大きすぎると私ので、

static void Main(string[] args) 
    { 

     Program A = new Program(); 
     string[] array = System.IO.File.ReadAllLines(@"C:\Users\dawid\Desktop\C#\Heapsort\dane.txt"); 
     int[] arrayInt = Array.ConvertAll(array, int.Parse); 
     A.BuildHeap(arrayInt, arrayInt.Length); 
     A.HeapSort(arrayInt, arrayInt.Length); 
     Console.WriteLine(string.Join(" ", arrayInt)); 
     Console.ReadLine(); 
    } 
関連する問題