快速排序空洞问题

本文关键字:问题 空洞 快速排序 | 更新日期: 2023-09-27 18:02:04

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

然而,当我连接较低,枢轴和较大的分区时,Visual Studio告诉我它不能将void转换为字符串列表,尽管我不确定连接的lessList和moreList如何甚至变成void。

代码片段:

    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;

快速排序空洞问题

事实是AddAddRange不返回一个包含添加元素(或范围)的新列表。相反,它们将元素添加到列表中,并对其进行就地修改。

事实上,你可以简单地修改代码,只做AddAddRange,它将工作。

请注意,这将是相当低效的,因为你创建列表和复制周围的东西很多。