快速排序法

2021-08-10 13:17:42 字數 1694 閱讀 7961

快速排序法為冒泡法的改進法,也是乙個最好的內排序,面試題也常遇到,也是作為碼農必須掌握的一種排序法

原理:取基準值(一般為第乙個),分割槽,將小於中間值的數值移到左側,大於的移到右側,反覆這個過程;

1.在待排序的元素任取乙個元素作為基準(通常選第乙個元素,但最的選擇方法是從待排序元素中隨機選取乙個作為基準),稱為基準元素;

2.將待排序的元素進行分割槽,比基準元素大的元素放在它的右邊,比其小的放在它的左邊;

3.對左右兩個分割槽重複以上步驟直到所有元素都是有序的。

所以我是把快速排序聯想成東拆西補西拆東補一邊拆一邊補,直到所有元素達到有序狀態。

下面再看看示圖理解下吧:

演算法實現

package sort;

/** * created by lading on 2017/11/8.

*/public

class

quicksort ;

quicksort(num,0,num.length-1);

for (int i:num)

}/**

* 快速排序法

* 原理:取基準值(一般為乙個),分割槽,將小於中間值的數值移到左側,大於的移到右側,反覆這個過程;

*思想:1.在待排序的元素任取乙個元素作為基準(通常選第乙個元素,但最的選擇方法是從待排序元素中隨機選取乙個作為基準),稱為基準元素;

*2.將待排序的元素進行分割槽,比基準元素大的元素放在它的右邊,比其小的放在它的左邊;

*3.對左右兩個分割槽重複以上步驟直到所有元素都是有序的。

*/public

static

void

quicksort(int num, int start, int end)

int i=start;

int j =end;

int value=num[i];

int temp=0;

boolean flag=true;

while (i!=j)else

}elseelse }}

quicksort(num, start, j-1); //對基準元素左邊的元素進行遞迴排序

quicksort(num, i+1, end); //對基準元素右邊的進行遞迴排序}}

排序前:

12 33 1 98 65 77 55 99 62

排序後:

演算法分析:

1. 當分割槽選取的基準元素為待排序元素中的最大或最小值時,為最壞的情況,時間複雜度和直接插入排序的一樣,移動次數達到最大值cmax = 1+2+…+(n-1) = n*(n-1)/2 = o(n2) 此時最好時間複雜為o(n2)

2. 當分割槽選取的基準元素為待排序元素中的」中值」,為最好的情況,時間複雜度為o(nlog2n)。

3. 快速排序的空間複雜度為o(log2n).

4. 當待排序元素類似[6,1,3,7,3]且基準元素為6時,經過分割槽,形成[1,3,3,6,7],兩個3的相對位置發生了改變,所是快速排序是一種不穩定排序。

快速排序法

一 快速排序演算法的基本特性 時間複雜度 o n lgn 最壞 o n 2 空間複雜度 o n lgn 不穩定。快速排序是一種排序演算法,對包含n個數的輸入陣列,平均時間為o nlgn 最壞情況是o n 2 通常是用於排序的最佳選擇。因為,基於比較的排序,最快也只能達到o nlgn c void q...

快速排序法

include stdafx.h include vos.h define table mid machine name midmachine define table midmach colname id id define table midmach colname ip ip define t...

快速排序法

快速排序法思想 在待排序的n個資料中取第乙個數字為基準數,陣列最前面放乙個標桿,陣列最後麵放乙個標桿,通過基準數和標桿 i,j 出的數進行比較,實現每次排序完時候,共三組數,不大於基準數 基準數 不小於基準數 舉例說明 5 i 4,6,8,3,9,2 j 基準數5 標桿 i 指向5位置,標桿 j 指...