重點掌握 快速排序

2021-08-17 20:18:40 字數 1296 閱讀 3273

快速排序是氣泡排序的改進版,也是最好的一種內排序,在很多面試題中都會出現,也是作為程式設計師必須掌握的一種排序方法。

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

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

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

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

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

6.對元素5兩邊的元素也重複以上操作,直到元素達到有序狀態。

演算法實現:

public class quicksort 

arr[right] = temp; //基準元素歸位

quicksort(arr,_left,left-1); //對基準元素左邊的元素進行遞迴排序

quicksort(arr, right+1,_right); //對基準元素右邊的進行遞迴排序

}

}public static void main(string args) ;

system.out.println("排序之前:");

for(int element : array)

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

system.out.println("\n排序之後:");

for(int element : array)}}

排序之前:

10 5 3 1 7 2 8

排序之後:

1 2 3 5 7 8 10

演算法分析:

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的相對位置發生了改變,所是快速排序是一種不穩定排序。

快速排序 從理解到掌握

首先我們先來看下快速排序演算法的原理 從陣列中取得乙個 標誌數字 沒有要求,可以隨便取,一般取第乙個 定義兩個位置變數 i j i 左邊找大於等於 標誌數字 的數 i 從右邊找小於等於 標誌數字 的數 找到後兩者交換位置 直到以該數字為標誌,實現該數字的左邊都是小於等於該數字的數,右邊都是大於等於該...

零基礎快速掌握Python的重點學習資源庫

用python編寫 一點都不難,事實上它一直被讚譽為最容易學的程式語言。如果你準備學習web開發,python是乙個不錯的開始,甚至想做遊戲的話,用python來開發遊戲的資源也有很多。這是快速學習這門語言的途徑之一。許多程式設計師都把python作為程式設計之旅的開始,然後是像php和ruby這樣...

基本排序系列之簡述快速排序,快速掌握快排

快速排序 快速排序的演算法複雜度最大可達到o n n 但平均演算法複雜度為 o n logn 由於快排採用了分治法,挺好用的,而且排序效率相對其他幾種排序演算法效率更高。快排採用的是一般取第乙個數為基準小的放在左邊,大的放在右邊,然後再對左邊的進行分治,再右邊的,按此下去達到排序的目的。下面簡述快排...