读书人

c# 快速排序求解答,该如何解决

发布时间: 2013-09-23 11:26:10 作者: rapoo

c# 快速排序求解答
写了个快速排序的方法,感觉逻辑上没有错误,但是运行结果不对,好像递归那里没起作用,但是我设置了断点发现递归那里执行了好多遍的,不知道错在哪里了,求高人指点,谢谢!
运行结果是:2,4,5,7,6


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace 快速排序
{
class Program
{
static void Main(string[] args)
{
//新建一个数组
int[] abc = new int[] { 5,7,6,2,4 };

ArrayList arrlist = new ArrayList();
//把数组添加到ArrayList中
arrlist.AddRange(abc);
Console.WriteLine("排序前:");
//循环打印出每个元素
foreach (int a in arrlist)
{
Console.Write("{0},", a);
}
//调用快速排序方法
arrlist=QuickSort(arrlist);
Console.WriteLine("排序后:");
foreach (int a in arrlist)
{
Console.Write("{0},", a);
}
Console.ReadKey();
}

public static ArrayList QuickSort(ArrayList arr)
{
//只要集合里面元素个数大于1,就一直进行分开操作
if (arr.Count > 1)


{
//指定集合里面第一个元素作为参照
int k = (Int32)arr[0];
ArrayList x = new ArrayList();
ArrayList y = new ArrayList();
int size = arr.Count;
for (int i = 1; i < size; i++)
{
if ((Int32)arr[i] <= k)
{
x.Add(arr[i]);//把小于第一个元素的都放到x里面
}
else
{
y.Add(arr[i]);//把大于第一个元素的都放到y里面
}
}
//递归
QuickSort(x);
QuickSort(y);
//新建一个ArrayList来保存递归返回的新集合
ArrayList z = new ArrayList();
z.AddRange(x);


z.Add(k);
z.AddRange(y);
return z;

}
else
{
return arr;//如果元素个数等于1或者0,返回arr(有可能为空集合null)
}


}
}
}


[解决办法]
你是将排序的结果作为返回值的,而没有修改原始的数据。如果你不用变量接收它,等于没排序。
[解决办法]
K=5的时候,代码执行到这y中的顺序是7、6,QuickSort(y)返回的集合中的顺序是6、7,你原来的代码添加的是y,不是QuickSort(y)的返回结果,所以顺序错了,2和4顺序正确是因为它们在原始数组中就是从小到大排列的

读书人网 >C#

热点推荐