簡(jiǎn)單理解快速排序

各大排序算法的時(shí)間空間復(fù)雜度

2018-04-04 13.51.45.jpeg

定義

快速排序是由冒泡排序進(jìn)化而來(lái)。

  • 在數(shù)據(jù)集之中,選擇一個(gè)元素作為"基準(zhǔn)"(pivot),一般選擇第一個(gè)或者最后一個(gè);
  • 所有小于"基準(zhǔn)"的元素,都移到"基準(zhǔn)"的左邊;所有大于"基準(zhǔn)"的元素,都移到"基準(zhǔn)"的右邊。
  • 對(duì)"基準(zhǔn)"左邊和右邊的兩個(gè)子集,不斷重復(fù)第一步和第二步,直到所有子集只剩下一個(gè)元素為止;
image.png

JAVA語(yǔ)言實(shí)現(xiàn)

private static void quickSort(int[] array, int left, int right) {
        int pivot,temp,i,j;
        if(left >= right) {
            return;
        }
        //p就是基準(zhǔn)數(shù),這里就是每個(gè)數(shù)組的第一個(gè)
        pivot = array[left];
        i = left;
        j = right;
        while(left < right) {
            //右邊當(dāng)發(fā)現(xiàn)小于pivot的值時(shí)停止循環(huán)
            while(array[right] >= pivot && left < right) {
                right--;
            }
            //這里一定是右邊開始,上下這兩個(gè)循環(huán)不能調(diào)換(下面有解析,可以先想想)
            //左邊當(dāng)發(fā)現(xiàn)大于pivot的值時(shí)停止循環(huán)
            while(array[left] <= pivot && left < right) {
                left++;
            }
            temp = array[right];
            array[right] = array[left];
            array[left] = temp;
        }
        array[i] = array[left];//pivot與left值互換
        array[left] = pivot;
        quickSort(array,i,left);  //對(duì)左邊快排
        quickSort(array,left+1,j); //對(duì)右邊快排

    }

  public static void main(String[] args) {
        int[] array = new int[]{4, 3,  2, 7, 8, 5, 1, 9, 6,1,2};
        quickSort(array, 0, array.length - 1);
        System.out.println("res = "+ Arrays.toString(array));

    }
}

時(shí)間復(fù)雜度

  • 最好情況:亂序
  • 最差情況:當(dāng)序列本身就是正序或者逆序的時(shí)候,每次取的基準(zhǔn)數(shù)是最大或者最小,這樣劃分的兩個(gè)子集元素分別是n-10個(gè)元素,這種情況就相當(dāng)于一個(gè)普通的冒泡排序其實(shí)
  • 平均情況:亂序

附上冒泡的簡(jiǎn)單JAVA版本

    public  static int[] popSort(int [] nums) {
        for (int i =0 ;i < nums.length ;i++) {
            for (int j =i+1 ;j < nums.length ;j++) {
                if (nums[i] < nums[j]) {
                    int temp = nums[i];
                    nums[i] = nums[j];
                    nums[j] = temp;
                }
            }
        }
        return nums;
    }

參考
https://pianshen.com/article/5011317794/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容