我有一个使用列表的快速排序程序。
错误发生在快速排序函数返回语句中。
System.Collections.List不包含Concat的定义和最佳扩展方法System.Collections.Generic.IEnumerableTsource有一些无效的参数。
代码如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter the n9o. of elements: ");
int n = Convert.ToInt32(Console.ReadLine());
List<int> unsorted = new List<int>();
Console.WriteLine("Enter the elements: ");
for (int i = 0; i < n; i++)
{
unsorted.Add(Convert.ToInt32(Console.ReadLine()));
}
List<int> sorted = quicksort(unsorted);
foreach (int entry in sorted)
{
Console.Write(entry + "\t");
}
return;
} //end of main.
public static List<int> quicksort(List<int> given)
{
if (given.Count == 1)
return given;
int mid = given.Count / 2;
List<int> less = new List<int>();
List<int> big = new List<int>();
for (int a = 0; a < given.Count; a++)
{
if (given[a] < mid)
{
less.Add(given[a]);
}
else
big.Add(given[a]);
}
return (quicksort(less).Concat(given[mid]).Concat(quicksort(big)));
}
}//end of class.
}//end of namespace.
答案 0 :(得分:5)
您不能Concat
int
加入IEnumerable<int>
。您可以将其包装在一个数组中,Concat
将其包装到其他列表中:
return quicksort(less)
.Concat(new[] { given[mid] })
.Concat(quicksort(big))
.ToList();
答案 1 :(得分:2)
由于错误试图告诉您,Concat()
方法会将集合的项目连接起来,而不是单个int
。
答案 2 :(得分:1)
我认为将[mid]添加到结果列表中是一个错误,因为它会将项目添加到结果列表中两次...
另外,你需要针对给定的[mid]而不是
进行测试所以你应该将你的if语句改为:
if (given[a] < given[mid])
less.Add(given[a]);
else if (given[a] > given[mid])
big.Add(given[a]);
这假设所有数字都是唯一的,因为如果给定[mid]不是唯一的,那么你就有问题