【经典算法】第一回:快速排序

1.概述

快速排序(Quick sort) 原理:

选取一个基数,通过一次扫描将要排序的数据分割成两部分,其中一部分所有数据都比这个基数小,另外一部分所有数据都不小于这个基数,然后按照此方法进行递归,已达到排序。

方法步骤:

  1. 设定要排序的起始和结束位置
  2. 选一个基数,一般直接选这个起始和结束坐标的中间坐标
  3. 已这个基数为准,循环遍历集合,从起始坐标开始,把大于基数的放在基数的右边,从结束坐标开始查找,把小于基数的放在基数的左边。
  4. 一次排序后,左边的数据都小于基数,右边的都大于基数,再重新开始上面的步骤1,2,3

2.示例

        public static void QuickSort(int[] nums, int left, int right)
        {
            if (left < right)
            {
                int i = left;
                int j = right - 1;
                int middle = nums[(left + right) / 2];//中间基数

                while (true)
                {
                    while (i < right && nums[i] < middle)//从左边开始搜索第一不小于基数的值,放到右边
                    {
                        i++;
                    }

                    while (j > 0 && nums[j] > middle)//从右边开始搜索第一个小于基数的值,放到左边
                    {
                        j--;
                    }
                    if (i == j)
                        break;

                    int temp = nums[i];
                    nums[i] = nums[j];
                    nums[j] = temp;

                    if (nums[i] == nums[j])
                        j--;
                }

                QuickSort(nums, left, i);
                QuickSort(nums, i + 1, right);
            }
        }
         //   int[] list = new[] { 4, 1, 2, 7, 9, 0, 8 };
         //   Sorter.QuickSort(list, 0, 7);

作者:Qlin
出处:http://www.cnblogs.com/qqlin/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/qqlin/p/2920656.html