排序算法-快速排序

Posted RONGWEIJUN

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-快速排序相关的知识,希望对你有一定的参考价值。

实现:

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

 

以上是关于排序算法-快速排序的主要内容,如果未能解决你的问题,请参考以下文章

一行Python代码搞定快速排序算法

交换排序(冒泡排序快速排序的算法思想及代码实现)

排序算法 | 快速排序(含C++/Python代码实现)

[leetcode]排序算法(冒泡排序,选择排序,插入排序,快速排序,计数排序)

十大经典排序算法总结(快速排序)

快速排序算法详解及代码实现