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)
}
}
}
}