快速排序空洞问题
本文关键字:问题 空洞 快速排序 | 更新日期: 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;
事实是Add
和AddRange
不返回一个包含添加元素(或范围)的新列表。相反,它们将元素添加到列表中,并对其进行就地修改。
事实上,你可以简单地修改代码,只做Add
和AddRange
,它将工作。
请注意,这将是相当低效的,因为你创建列表和复制周围的东西很多。