码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法-快速排序

时间:2017-12-27 18:09:56      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:art   collect   ati   ==   new   param   ima   nbsp   gen   

技术分享图片

技术分享图片

技术分享图片

实现:

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)//当I=J说明我们找到了 中间位置,这个中间位置就是基准数应该所在的位置
            {
                //从后往前比较 (从右向左比较)找一个比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];
            }

            //跳出循环 现在i==j i是中间位置
            dataArray[left] = x; //left-x-right
            return left;
        }
    }
}

 

排序算法-快速排序

标签:art   collect   ati   ==   new   param   ima   nbsp   gen   

原文地址:https://www.cnblogs.com/rongweijun/p/8126091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!