快速排序

    快速排序的核心思想是分治法,首先定义2个指针,left和right分别指向数组的第一个元素后最后一个元素,还需要一个一个基准值index,来作为比较对象,一般取第一个元素

    排序的过程是:在left<right的条件内,从后向前扫描,找到比基准值小的元素放到前面,然后从前往后扫描,将比基准值大的元素放到后面,最后将基准值放到中间,一次排序后,基准值左边都比基准值小,右边都比基准值大

    速排序的平均时间复杂度为O(n×log(n)),最糟糕时复杂度为O(n^2);
快速排序是一个不稳定的排序(有两个相同的数A和B,在排序之前A在B的前面,而经过排序之后,B跑到了A的前面,对于这种情况的发生,我们管他叫做排序的不稳定性)

/**
 * 快速排序
 */
public class QuickSort {

    public static void QuickSort(int [] array,int left,int right){
        int index; //记录基准值
        if (left<right){
            index=sortPass(array,left,right);
            QuickSort(array,left,index-1);
            QuickSort(array,index+1,right);
            int i=array.length;
        }
    }

    //快排分割过程
    public static int sortPass(int [] array,int left,int right){
        int index=array[left];

        while (left<right){
            //从后向前扫描,找到比基准值小的
            while (left<right&&array[right]>=index) right--;
            //将后面的写到前边去
            array[left]=array[right];
            //从前向后扫描,找到比基准值大的数
            while (left<right&&array[left]<=index) left++;
            array[right]=array[left];
        }
        //将基准值放到对应的位置,此时基准值左边都比基准值小
        array[left]=index;
        return  left;
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容