排序算法-快速排序

实现:

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

namespace _008_快速排序
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] data = new int[] { 42, 20, 17, 27, 13, 8, 17, 48,65 };
            QuickSort(data,0,data.Length-1);
            for (int i = 0; i < data.Length; i++)
            {
                Console.Write(data[i] + " ");
            }
        }

        private static void QuickSort(int[] dataArray, int left, int right)
        {
            if (left < right)
            {
                int middle = partition(dataArray, left, right);
                QuickSort(dataArray, left, middle - 1);
                QuickSort(dataArray, middle + 1, right);
            }
        }

        /// <summary>
        /// 对数据dataArray中索引从left到right之间得数做排序
        /// </summary>
        /// <param name="data">要排序得数组</param>
        /// <param name="left">要排序数据得开始索引</param>
        /// <param name="right">要排序数据得结束索引</param>
        private static int partition(int[] dataArray, int left,int right)
        {
            //基准数
            //把比它小或者等于它的 放在它的左边 
            //比它大的 放在它的右边
            int x = dataArray[left];
            while (left<right)//当left=right说明我们找到了 中间位置,这个中间位置就是基准数应该所在的位置
            {
                //从后往前比较 (从右向左比较)找一个比x小(或者等)的数字,放在我们的坑里,坑位于left的位置
                while (left < right && dataArray[right] >= x) 
                    right--;//向左移动 到下一个数字,然后做比较
                //当循环跳出时就找到一个比基准数 小于或者等于的数,应该把它放在x的左边
                dataArray[left] = dataArray[right];

                //从前往后比较 (从左向右比较)找一个比x大的数字,放在我们的坑里,现在的坑位于j的位置
                while (left < right && dataArray[left] <= x)
                    left++;//向右移动 到下一个数字,然后做比较
                //当循环跳出时就找到一个比基准数 大于数,应该把它放在x的右边
                dataArray[right] = dataArray[left];
            }

            //跳出循环 现在left==right left是中间位置
            dataArray[left] = x; //left-x-right
            return left;
        }
    }
}
原文地址:https://www.cnblogs.com/rongweijun/p/8126091.html