【发布时间】:2017-11-14 13:03:54
【问题描述】:
所以我必须使用给定的伪代码(仅用于堆排序)为大学制作 HeapSort Algorythm。而且我必须使用输入和输出文件。但现在我只制作了工作正常的输入文件,因为它加载了 txt 文件并在控制台中写下了所有数字。所以问题是在向 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();
}
}
}
【问题讨论】:
-
使用断点,试着看看你的代码在做什么以及为什么你的排序不起作用,这是我能给你的最好的建议,因为你的代码对我来说太大而我无法阅读现在测试它的方法
-
我测试了这个程序,稍作改动。我没有从 txt 文件中获取数字,而是使用随机元素创建了一个 int 数组,而不是 A.BuildHeap(array, n); A.HeapSort(array, n);我这样做了: A.BuildHeap(array, array.Length); A.HeapSort(array, array.Length);它确实有效,但是在使用 list (array.Count) 做同样的事情之后它没有用。有什么解决办法吗?
-
我的意思是:使用断点检查每个变量所持有的值(这称为调试),或者,如果您愿意,可以使用 Console.Write(您想要的变量追踪);在循环内部,它会让您了解代码中发生的事情。
-
我之前已经试过了,结果是我所有的循环都只写了一次我的 txt 文件,就是这样。但我终于找到了解决办法。
标签: c# file sorting arraylist heapsort