C# 对列表框中的随机数进行快速排序+;IMG
我试图在列表框中快速排序10个随机数。但是我不能在我的随机iar上使用这种方法,有人能给我一些建议吗 代码隐藏按钮:C# 对列表框中的随机数进行快速排序+;IMG,c#,C#,我试图在列表框中快速排序10个随机数。但是我不能在我的随机iar上使用这种方法,有人能给我一些建议吗 代码隐藏按钮: private void btnSort_Click(object sender, EventArgs e) { Random r = new Random(); int n = 10; int[] iar = new int[n]; for (int i = 0; i < iar.L
private void btnSort_Click(object sender, EventArgs e)
{
Random r = new Random();
int n = 10;
int[] iar = new int[n];
for (int i = 0; i < iar.Length; i++)
{
iar[i] = r.Next(0, 20);
lb1.Items.Add(iar[i]);
//here is the error i want to fill lb2 with the quicksorted array
// using the quicksort method
Quicksort(iar, 0, iar.Length - 1);
}
for (int i = 0; i < iar.Length; i++)
{
lb2.Items.Add(iar[i]);
}
}
private void bSensor\u单击(对象发送者,事件参数e)
{
随机r=新随机();
int n=10;
int[]iar=新的int[n];
对于(int i=0;i
快速排序法
public static void Quicksort(IComparable[] elements, int left, int right)
{
int i = left, j = right;
IComparable pivot = elements[(left + right) / 2];
while (i <= j)
{
while (elements[i].CompareTo(pivot) < 0)
{
i++;
}
while (elements[j].CompareTo(pivot) > 0)
{
j--;
}
if (i <= j)
{
// Swap
IComparable tmp = elements[i];
elements[i] = elements[j];
elements[j] = tmp;
i++;
j--;
}
}
// Recursive calls
if (left < j)
{
Quicksort(elements, left, j);
}
if (i < right)
{
Quicksort(elements, i, right);
}
}
}
公共静态void快速排序(IComparable[]元素,int left,int right)
{
int i=左,j=右;
i可比较轴=元素[(左+右)/2];
而(i 0)
{
j--;
}
如果(i在给定的上下文中,不需要指定IComparable
而不是int
,因为您只使用整数。您还调用了快速排序
,因为如果在已生成的列表上运行快速排序
算法,每个数字都会在最有效的情况下生成,所以请移动语句在循环之外。也要记住,有更好的排序算法可以对这样的少量数据进行排序
单击事件处理程序:
private void bSensor\u单击(对象发送者,事件参数e)
{
随机r=新随机();
int n=10;
int[]iar=新的int[n];
//生成随机数并将其存储在未排序的列表框中
对于(int i=0;i
快速排序函数
//取整数数组而不是IComparable数组
公共静态void快速排序(int[]元素,int左,int右)
{
int i=左;
int j=右;
int pivot=元素[(左+右)/2];
而(i 0)
{
j--;
}
如果(i因为您已经声明了Quicksort
方法来获取IComparable
对象数组,那么您需要向它传递一个IComparable
对象数组,而不是int
s数组。一个明显的解决方案是声明一个包装类:
class MyQuicksortableInt : IComparable
{
public int Value { get; set; }
// Implementation of IComparable left as an exercise for the reader;
// see http://msdn.microsoft.com/en-us/library/System.IComparable.aspx for details
}
将iar
更改为MyQuicksortableInt[]
类型,您现有的Quicksort
代码将愉快地接受它。您需要执行以下操作:
public static void Quicksort<T>(T[] elements, int left, int right) where T:IComparable<T>
然后在任何地方使用T而不是IComparable“我认为这个方法很好,但我无法调试它。”-你必须对此进行详细说明,因为最有可能得到的答案是“使用调试器”。如果手动排序的目的是因为你在学习算法,那么更重要的是,IComparable[]与int[]非常不同这是两个错误的根源。当创建一个未排序的字符串元素数组时。它确实有效。string是一个实现IComparable的类。int是一个不实现IComparable的原语。哦,好的,你能给我一些建议如何解决吗?首先,我用一个元素字符串对它进行了测试,就像pete说int不实现IComparable一样。
class MyQuicksortableInt : IComparable
{
public int Value { get; set; }
// Implementation of IComparable left as an exercise for the reader;
// see http://msdn.microsoft.com/en-us/library/System.IComparable.aspx for details
}
public static void Quicksort<T>(T[] elements, int left, int right) where T:IComparable<T>
public static void Quicksort(IComparable[] elements, int left, int right)