空地

生活,工作,记录(内容基本都是转载,自己工作用到的时候看看而已)

导航

C#实现快速排序算法

C#实现快速排序算法
2008年10月06日 星期一 23:08

///使用递归原理,通过一趟排序将要排序的数据分割成独立的两部分,
///其中一部分的所有数据都比另外一部分的所有数据都要小,
///然后再按此方法对这两部分数据分别进行快速排序

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

namespace ConsoleApplication1
{
    class Class1
    {
        public static void QuickSort(int[] intArray, int nLower, int nUpper)
        {
            if (nLower < nUpper)
            {
                int nSplit = Partition(intArray, nLower, nUpper);
                ///递归排序
                QuickSort(intArray, nLower, nSplit - 1);
                QuickSort(intArray, nSplit + 1, nUpper);
            }
        }
        /// <summary>
        /// 方法参数:原始数组、第一个元素位置、最后元素位置
        /// 方法功能:完成一趟快速排序
        /// </summary>
        /// <param name="intArray"></param>
        /// <param name="nLower"></param>
        /// <param name="nUpper"></param>
        /// <returns></returns>
        static int Partition(int[] intArray, int nLower, int nUpper)
        {
            int nLeft = nLower + 1;
            ///以数组第一个元素值作为支点
            int nPivot = intArray[nLower];
            int nRight = nUpper;

            int nSwap;
            while (nLeft <= nRight)
            {
                ///从左向右寻找大于支点元素
                while (nLeft <= nRight && intArray[nLeft] < nPivot)
                    nLeft++;
                ///从右向左寻找小于支点元素
                while (nLeft <= nRight && intArray[nRight] >= nPivot)
                    nRight--;
                ///交换nLeft和nRight位置元素值
                if (nLeft < nRight)
                {
                    nSwap = intArray[nLeft];
                    intArray[nLeft] = intArray[nRight];
                    intArray[nRight] = nSwap;
                    nLeft++;
                    nRight--;
                }
            }
            ///以intArray[nRight]为新支点
            nSwap = intArray[nLower];
            intArray[nLower] = intArray[nRight];
            intArray[nRight] = nSwap;
            return nRight;
        }
    }

    public class MainClass
    {
        static void Main(string[] args)
        {
            int[] a = new int[9] { 8, 6, 3, 5, 4, 9, 1, 2, 7 };

            Class1.QuickSort(a, 0, a.Length - 1);

            foreach (int i in a)
                Console.WriteLine(i);

            Console.ReadLine();
        }    

    }

}

posted on 2008-12-02 09:58  小梅  阅读(170)  评论(0)    收藏  举报