数据结构与算法之快速排序

  简介

    快速排序和其他几种排序的方法相比它的效率较高,因此经常被使用。它由C.R.A.Hoare于1962年提出的一种划分交换排序。采用了一种分治策略,通常称其为分治法(Divide-and-ConquerMethod)。其时间复杂度为O(N*logN)

 分治法的基本思想

    将原问题分解为若干个规模更小但结构与原问题类似的子问题。递归这些子问题,然后将这些子问题的解组合为原问题的解。

 快速排序的步骤

    1、首先在数组中找出一个元素的数值,该值作为基准数。一般选择数组下标中间的数或第一个元素。

    2、分区时将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

    3、再对分好的左右区间进行第2步骤,直到各区间只有一个数。

 快速排序实现

        public void QuickSort1(int[] array, int l, int r)
        {
            if (l < r)
            {
                int i = l, j = r;
                int element = array[i];

                while (i < j)
                {
                    while (i < j && array[j] >= element)//找到小于element的数
                        j--;

                    if (i < j)
                    {
                        array[i] = array[j];
                        i++;//后一个元素
                    }

                    while (i < j && array[i] < element)//找到大于element的数
                        i++;

                    if (i < j)
                    {
                        array[j] = array[i];
                        j--;//前一个元素
                    }
                }

                array[i] = element;

                QuickSort1(array, l, i - 1);//左区间
                QuickSort1(array, i + 1, r);//右区间

            }
        }
原文地址:https://www.cnblogs.com/Khadron/p/5342255.html