快速排序算法

C#实现快速排序算法
 

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

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

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值