QuickSort无效问题

时间:2013-03-02 10:56:27

标签: c# quicksort

我一直在尝试用C#编写自己的快速排序。

然而,当我连接下层,枢轴和更大的分区时,Visual Studio告诉我它无法将void转换为字符串列表,尽管我不确定连接的lessList和moreList如何变得无效。

代码段:

    public List<string> SortFiles(List<string> fileList)
    {
        int listSize = fileList.Count;

        if (listSize <= 1)
        {
            return fileList; //because it is already sorted
        }

        string pivotString = fileList[listSize/2];

        //partition list
        List<string> lessList = new List<string>();
        List<string> moreList = new List<string>();

        foreach (string g in fileList)
        {
            if (String.Compare(g, pivotString) <= 0)
            {
                lessList.Add(g);
            }
            else
            {
                moreList.Add(g);
            }
        }

        lessList = SortFiles(lessList);
        moreList = SortFiles(moreList);

        //concatenate lessList + pivot + moreList
        List<string> sortedFiles = lessList.Add(pivotString); //thinks is void
        sortedFiles = sortedFiles.AddRange(moreList);         //thinks is void

        return sortedFiles;

1 个答案:

答案 0 :(得分:2)

事实是AddAddRange不会返回带有添加元素(或范围)的新列表。 相反,他们将元素添加到列表中,并就地修改它。

事实上,您只需修改代码即可执行AddAddRange,这样就可以了。

请注意,它会相当低效,因为您要创建列表并复制很多东西。