算法基础--快速排序

Posted 谓戒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法基础--快速排序相关的知识,希望对你有一定的参考价值。

基本思想:

通过一趟排序将需要排序的元素分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。

过程:

(1)设置两个首尾指针left和right,并用base指向头元素作为基准数;

(2)通过right从右到左扫描,寻找比base指向元素小的元素,然后left指向此元素,此时left指向最小数;

(3)通过left从左到右扫描,寻找比base指向元素大的元素,然后right指向此元素,此时right指向最大数;

(4)循环操作2,3直到left和right指向同一个元素,此时左边都比base指向元素小,右边都比base指向元素大;

(5)以base做分割点,递归操作左右两个元素组;

优化:(1)用递归可以减少代码的编写,但是实际上比较消耗内存,特别操作大数组的时候,所以可以用两个循环的形式(不做实现);

实例:

public class QuickSort{

    private int division(int[] arr, int left,int right){

        int base = arr[left];

        while(left < right){

            while(left<right && arr[right] >= base){

                    right --;

            }

            arr[left] = arr[right];

            while(left < right && arr[left] <= base){

                left ++;

            }

            arr[right] = arr[left];

        }

        arr[left] = base;

        return left;

    }


    private void quickSort(int[] arr,int left,int right){

        if(left < right){

            int base = division(arr,left,right);

            quickSort(arr,left,base-1);

            quickSort(arr,base+1,right);

        }

    }

}

以上是关于算法基础--快速排序的主要内容,如果未能解决你的问题,请参考以下文章

算法基础快速排序——O(nlogn)

快速排序(基础版)

js排序算法基础--快速排序

基础算法系列之排序算法[快速排序,归并排序,二分查找]

重温基础算法内部排序之快速排序法

重温基础算法内部排序之快速排序法