我一直在尝试用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;
答案 0 :(得分:2)
事实是Add
和AddRange
不会返回带有添加元素(或范围)的新列表。
相反,他们将元素添加到列表中,并就地修改它。
事实上,您只需修改代码即可执行Add
和AddRange
,这样就可以了。
请注意,它会相当低效,因为您要创建列表并复制很多东西。