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

  简介

    快速排序和其他几种排序的方法相比它的效率较高,因此经常被使用。它由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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值