首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-09-23 
c# 快速排序求解答写了个快速排序的方法,感觉逻辑上没有错误,但是运行结果不对,好像递归那里没起作用,但是

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顺序正确是因为它们在原始数组中就是从小到大排列的

热点排行