从txt文件到数组列表的HeapSort Algorythm不对数字进行排序

时间:2017-11-14 13:03:55

标签: c# file sorting arraylist heapsort

所以我必须使用伪代码为大学制作HeapSort Algorythm(仅适用于heapsort)。我必须使用输入和输出文件。但是现在我只生成了输入文件,因为它加载了txt文件并写下了Console中的所有数字。所以问题是在向Main添加排序方法后没有任何变化。此外,我决定对每种方法进行测试,所有这些方法都会记下我的数字,就是这样。我对排序不是很好,所以我很难找到问题。另外因为它来自伪代码我不得不使用而且没有我能为自己做的代码。那么你知道导致排序没有发生的原因是什么?

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

1 个答案:

答案 0 :(得分: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();
    }