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

内排序-快速排序

时间:2018-08-17 00:33:27      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:lin   有序   quick   目的   class   交换   部分   str   获得   

算法思想:通过一趟排序将待排序列分割成独立的两部分,其中一部分均比另外一部分小,则可对这两部分继续继续排序,重复之前步骤,以达到整个序列有序的目的.它是由图灵获得者 Tony Hoare设计出来的,该算法被列为20世纪十大算法之一.

 

 //寻找关键值的位置,最后一次性移过去
    class QuickSort_1
    {
        static void Main(string[] args)
        {
            int[] a = new int[] { 20, 30, 90, 40, 70, 110, 60, 10, 100, 50, 80,9,8,7,6 };
       
            QuickSort_1 quickSort = new QuickSort_1();
            quickSort.Sort(a, 0, a.Length - 1);
            foreach (int i in a)
            {
                Console.WriteLine(i);
            }
            Console.ReadLine();
        }
        /// <summary>
        /// 交换数据
        /// </summary>
        /// <param name="datas"></param>
        /// <param name="index1"></param>
        /// <param name="index2"></param>
        void ExchangeData(int[] datas, int index1, int index2)
        {
            if (index1 < 0 || index2 < 0 || index1 >= datas.Length || index2 >= datas.Length)
            {
                return;
            }          
            datas[index1] = datas[index2] + (datas[index2] = datas[index1]) * 0;
        }
        public void Sort(int[] arrays, int left_index, int right_index)
        {
            if (left_index == right_index) return;
            int important = left_index;//关键值
            int cur_left = left_index;//左游标
            int cur_right = right_index;//右游标
           
            while (cur_left < cur_right)//当左右游标未相遇时
            {
                while (arrays[cur_right] >= arrays[important] && cur_left < cur_right)
                {
                    cur_right--;//先从右游标开始 ,递减遇到小于关键元素的值
                }
                while (arrays[cur_left] <= arrays[important] && cur_left < cur_right)
                {
                    cur_left++;//再从左游标开始 ,递减遇到大于关键元素的值
                }
                if (cur_left <cur_right && arrays[cur_left] > arrays[cur_right])
                {
                    ExchangeData(arrays, cur_left, cur_right);//当游标未相遇时,并且前值大于后值时,交换这两个游标指向的值
                }
            }
            if (cur_left == cur_right )
            {//当游标相遇时
                ExchangeData(arrays, important, cur_right);//把关键值交换到相遇位置
                important = cur_left;
                Sort(arrays, left_index, important - 1);// 将关键值左边的序列 重复以上过程
                Sort(arrays, important + 1, right_index);//将关键值右边的序列 重复以上过程
            }
        }
    }

 

内排序-快速排序

标签:lin   有序   quick   目的   class   交换   部分   str   获得   

原文地址:https://www.cnblogs.com/mytrip/p/9478242.html

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