计算用于字母数字数据的排序?

时间:2016-05-02 22:51:13

标签: c# visual-studio sorting while-loop counting

我必须使用我的项目的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();
}

请有人帮助我并告诉我哪里出错了,并希望该怎么做。谢谢!

2 个答案:

答案 0 :(得分:1)

您收到System.ArgumentException,因为您将错误的类型传入CompareTo。在下面的代码中,counts[i]正在索引字符串,这意味着您实际调用CompareTo的内容是charCompareTo有许多版本(事实上,对于字符和字符串都有多个版本)。虽然这可能无法完全解决您的计划中的问题(我没有按照这种或那种方式对其进行测试),只需将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)

问题是countsstring,而不是string的数组或列表。
我没有理解大部分代码,但尝试匹配类型(也许将counts替换为Data?再次,没有多少了解但似乎合适)