Quick Sort

  • 描述
    實(shí)現(xiàn)快速排序算法

  • 分析
    隨機(jī)選擇待排序數(shù)組中一個(gè)元素為中心軸,將所有小于中心軸的元素移到左邊,大于中心軸的元素移到右邊,然后對(duì)中心軸左邊和右邊按照以上步驟遞歸下去,直至有序。
    中心軸的選擇很重要,比較好的情況就是恰好選擇的元素就是數(shù)組的中位數(shù),這時(shí)候遞歸樹(shù)相對(duì)平衡,遞歸樹(shù)的高也就是棧的深度,樹(shù)越平衡,消耗的棧空間越少,最壞情況,即待排序數(shù)組逆序,可以演化為冒泡排序,且空間復(fù)雜度O(n)。

  • 時(shí)間復(fù)雜度O(nlogn),空間復(fù)雜度O(logn)

public class Solution {

    public void quickSort(int[] arr, int left, int right) {
        int pivotIndex = partition(arr, left, right);
        if(left < pivotIndex - 1)
            quickSort(arr, left, pivotIndex - 1);
        if(right > pivotIndex)
            quickSort(arr, pivotIndex, right);
    }

    public int partition(int[] arr, int left, int right) {
        int pivot = arr[(left+right)/2];
        while(left <= right) {
            while(arr[left] < pivot)
                ++ left;
            while(arr[right] > pivot)
                -- right;
            if(left <= right) {
                swap(arr, left, right);
                ++ left;
                -- right;
            }
        }
        return left;
    }

    public void swap(int[] arr, int a, int b) {
        int tmp = arr[a];
        arr[a] = arr[b];
        arr[b] = tmp;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. 簡(jiǎn)介 快速排序是由C.A.R.Hoare在1960年發(fā)明的。快速排序可能是應(yīng)用最廣泛的排序算法了,快速排序的...
    謝樸歡閱讀 3,327評(píng)論 0 3
  • 本文有七千字,閱讀大約需要占用你10分鐘時(shí)間。 好吧。。隨便寫的,我也不知道會(huì)花多久看完。因?yàn)閷懙谋容^爛,而且只是...
    鍋與盆閱讀 8,186評(píng)論 5 36
  • 當(dāng)n較大,則應(yīng)采用時(shí)間復(fù)雜度為O(nlog2n)的排序方法:快速排序、堆排序或歸并排序序。 是目前基于比較的內(nèi)部排...
    金聲玉振閱讀 1,554評(píng)論 0 0
  • 快速排序是一種分治算法,將一個(gè)數(shù)組分成兩個(gè)子數(shù)組,將兩部分獨(dú)立的排序。快速排序和歸并排序是互補(bǔ)的:歸并排序?qū)?shù)組分...
    sleepyjoker閱讀 326評(píng)論 0 0
  • 作為最常用和好用的排序方法, 快速排序是每個(gè)工程師必須隨時(shí)能夠手寫出代碼和解釋其運(yùn)行原理的算法 快速排序算法 快排...
    陳碼工閱讀 435評(píng)論 0 0