我必须使用我的项目的Counting排序对字母数字数据库进行排序,并且我不断给出错误的代码。我有一个存储了字母数字值的txt文件,例如是86K4G9F8124。 (txt文件中有10000个随机的)。这是我在visual studio中的代码(它在C#中)并在行上给出了一个错误:while(count [i] .CompareTo(f)> 0)。
这是:
{
ArrayList Data = new ArrayList();
Stopwatch SW = new Stopwatch();
StreamWriter SWr = new StreamWriter("Time.txt");
int j = 100;
while (j != 10000)
{
ReadData(ref Data, j);
SW.Start();
CountingSort(Data);
SW.Stop();
SWr.WriteLine("{0} {1}", j, SW.ElapsedTicks);
Console.WriteLine(j);
SW.Reset();
j = j + 100;
Data.Clear();
}
SWr.Close();
}
static void CountingSort(ArrayList Data)
{
// O(1)
string max, b;
max = (string)Data[0];
// O(N)
for (int i = 0; i < Data.Count; i++)
{
b = (string)Data[i];
if (b.CompareTo(max) > 0)
{
max = b;
}
}
// Space complexity O(N+K)
string counts = (string)Data[0];
string output =(string)Data[Data.Count - 1];
string c;
// O(N)
for (int i = 0; i < Data.Count; i++)
{
c = (string)Data[i];
counts = c;
}
string d;
string e;
string f = " ";
// O(N+K)
for (int i = 0; i < counts.Length; i++)
{
while (counts[i].CompareTo(f) > 0)
{
d = (string)Data[i];
output= d;
e = (string)Data[i--];
counts = e;
}
}
}
static void ReadData(ref ArrayList data, int Times)
{
StreamReader SR = new StreamReader("Data.txt");
for (int i = 0; i < Times; i++)
{
data.Add(SR.ReadLine());
}
SR.Close();
}
请有人帮助我并告诉我哪里出错了,并希望该怎么做。谢谢!
答案 0 :(得分:1)
您收到System.ArgumentException
,因为您将错误的类型传入CompareTo
。在下面的代码中,counts[i]
正在索引字符串,这意味着您实际调用CompareTo
的内容是char
。 CompareTo
有许多版本(事实上,对于字符和字符串都有多个版本)。虽然这可能无法完全解决您的计划中的问题(我没有按照这种或那种方式对其进行测试),只需将f
的类型从string
更改为char
即可解决问题你目前面临的问题。
char f = ' ';
// O(N+K)
for (int i = 0; i < counts.Length; i++)
{
while (counts[i].CompareTo(f) > 0)
{
d = (string)Data[i];
output= d;
e = (string)Data[i--];
counts = e;
}
}
如果您在此处CompareTo
阅读了CompareTo
的评论,您会发现此行为已记录在案。您的代码编译是因为有object
的重载接受string
作为参数,而object
继承自object
所以允许此方法调用,但是,如果传递给null
的{{1}}不是char
或类型为ArgumentException
的实例,那么基本上会抛出 Date Description Debit
2014-01-01 "abcdef VA" 15
2014-01-01 "ghijkl" NY" 56
,只需查看代码并确保进行比较chars to chars和strings to strings,你应该很好,去除实际排序逻辑中的任何错误。
答案 1 :(得分:0)
问题是counts
是string
,而不是string
的数组或列表。
我没有理解大部分代码,但尝试匹配类型(也许将counts
替换为Data
?再次,没有多少了解但似乎合适)