快排演算法是怎樣排序的呢,快速排序演算法原理與實現

2023-02-16 01:40:11 字數 4632 閱讀 7315

1樓:匿名使用者

快排的一趟稱為一次劃分,原因是一趟排序後,陣列以基準元素x為界,左邊的元素都小於等於x,右邊的元素都大於等於x。

要做到這點:先刨去21,再設倆指標,一個指向最左邊,一個指向最右邊。左邊指標的往右走,找一個大於等於21的元素,右邊的指標往左走,找一個小於等於21的元素,然後倆指標的值交換。

繼續迴圈上面的過程。直到倆指標相遇或擦肩而過。把21交換到倆指標相遇的地方就可以了。

第一次交換25和9,然後倆指標相遇,把21和界限處的17交換,得到:

結果:17 9 5 21 25 23 30

快速排序演算法原理與實現

2樓:之何勿思

快速排序的基本思想就是從一個陣列中任意挑選一個元素(通常來說會選擇最左邊的元素)作為中軸元素,將剩下的元素以中軸元素作為比較的標準,將小於等於中軸元素的放到中軸元素的左邊,將大於中軸元素的放到中軸元素的右邊。

然後以當前中軸元素的位置為界,將左半部分子陣列和右半部分子陣列看成兩個新的陣列,重複上述操作,直到子陣列的元素個數小於等於1(因為一個元素的陣列必定是有序的)。

以下的**中會常常使用交換陣列中兩個元素值的swap方法,其**如下public static void swap(int a, int i, int j){

int tmp;

tmp = a[i];

a[i] =a[j];

a[j] =tmp;

3樓:如之人兮

基本原理。

從序列中任選一個數作為「基準」;所有小於「基準」的數,都挪到「基準」的左邊;所有大於等於「基準」的數,都挪到「基準」的右邊。

在這次移動結束之後,該「基準」就處於兩個序列的中間位置,不再參與後續的排序;針對「基準」左邊和右邊的兩個子序列,不斷重複上述步驟,直到所有子序列只剩下一個數為止。

1、選擇「基準」,並將其從原始陣列分離。

先獲取基準的索引值,再使用splice陣列方法取出基準值。

tips:該例項中, 基準的索引值 = parseint(序列長度 / 2)。

tips:splice方法會改變原始陣列。例如,arr = 1, 2, 3]; 基準索引值為1,基準值為2,原始陣列變為arr = 1, 3]。

2、遍歷序列,拆分序列。

與「基準」比較大小,並拆分為兩個子序列,小於「基準」的數儲存於leftarr陣列當中,大於等於「基準」的數儲存於rightarr陣列當中。

tips:當然,也可以將 小於等於「基準」的數存於leftarr,大於「基準」的數存於rightarr。

由於要遍歷序列,將每一個數與「基準」進行大小比較,所以,需要藉助for語句來實現。

3、遞迴呼叫,遍歷子序列並組合子序列的結果。

定義一個函式,形參用於接收陣列。

function quicksort(arr) ;

實現遞迴呼叫遍歷子序列,用concat陣列方法組合子序列的結果。

4、判斷子序列的長度。

遞迴呼叫的過程中,子序列的長度等於1時,則停止遞迴呼叫,返回當前陣列。

4樓:無色冰糖

快速排序演算法的原理與實現:

快速排序與歸併排序已有,也使用分治思想。下面介紹下對一個典型的子陣列a[p..r]進行快速排序的三步分治過程:

分解:陣列a[p..r]被劃分為兩個(可能為空)子陣列a[p..

q-1]和a[q+1..r],使得a[p..q-1]中的每一個元素都小於等於a[q],而a[q]也小於等於a[p..

q-1]中的每個元素,其中,計算下標q也是劃分過程的一部分。

解決:通過遞迴呼叫快速排序,對子陣列a[p..q-1]和a[q+1..r]進行排序。

合併:因為子陣列都是原址排序的,所以不需要合併操作:陣列a[p..r]已經有序。

通俗點講就是把陣列根據一個參照值劃分為兩部分,左邊部分小於等於參照值,右邊部分大於等於參照值,然後再不斷遞迴呼叫該方法,直到陣列只有一個元素,就認為其是有序的。注意:劃分過程,左邊部分和右邊部分可以是不均衡的。

例如://將陣列排序成滿足陣列左邊比中間值小,右邊比中間值大的方法。

int partition(int arr, int left, int right)

int i = left, j = right;

int tmp;

//定義參照值為陣列的中間值。

int pivot = arr[(left + right) /2];

while (i <=j)

void quicksort(int arr, int left, int right)

if (index < right)

}@test public void testquicksort();

quicksort(a,0, -1);

"最終排序結果"+;

5樓:匿名使用者

快速排序的原理:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

假設要排序的陣列是a[1]……a[n],首先任意選取一個資料(通常選用第一個資料)作為關鍵資料,然後將所有比它的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一躺快速排序。一躺快速排序的演算法是:

1)設定兩個變數i、j,排序開始的時候i:=1,j:=n;

2)以第一個陣列元素作為關鍵資料,賦值給x,即x:=a[1];

3)從j開始向前搜尋,即由後開始向前搜尋(j:=j-1),找到第一個小於x的值,兩者交換;

4)從i開始向後搜尋,即由前開始向後搜尋(i:=i+1),找到第一個大於x的值,兩者交換;

5)重複第3、4步,直到i=j。

¿ìëùååðòêç×îºãµäååðòëã·¨âð

在各類演算法中那種演算法排序是最快的?

6樓:crazy不痛

說句實話,沒有最快。

這一說。如果不在乎浪費空間,應該是桶排序最快。

如果整體基本有序,插入排序最快。

如果考慮綜合情況,快速排序更加實用常見(希爾排序、堆排序等各種排序也各有優劣)

一般情況下,冒泡這種排序僅僅是名字起的有趣罷了,不太好用。

7樓:樹袋熊劉

直接插入排序:當資料有序時,執行效率最好,此時的時間複雜度為o(n);當資料基本反序時,執行效率最差,此時的時間複雜度為o(n2)。所以當資料越接近有序,直接插入排序演算法的效能越好。

希爾排序 :時間效率為o(n(log2n)2)

直接選擇排序:時間效率為 o(n^2)——雖移動次數較少,但比較次數仍多。

堆排序:時間效率為o(nlog2n)

氣泡排序:時間效率為o(n^2) —因為要考慮最壞情況(資料元素全部逆序),當然最好情況是資料元素已全部排好序,此時迴圈n-1次,時間複雜度為o(n)

快速排序:時間效率:一般情況下時間複雜度為o(nlog2n),最壞情況是資料元素已全部正序或反序有序,此時每次標準元素都把當前陣列分成一個大小比當前陣列小1的子陣列,此時時間複雜度為o(n2)

8樓:豔鼠逗白貓

隨機化快速排序。。。

桶排序貌似最快。。

快速排序演算法是基於什麼演算法的排序演算法

9樓:匿名使用者

快速排序是基於一種叫做「二分」的思想。

10樓:網友

基於的排序演算法要原創嗎,我可為您操作。

請編寫程式使用快速排序演算法對陣列中的資料進行降序排序。

11樓:網友

這是使用快速排序演算法對陣列中的資料進行降序排序的**,每次執行隨機生成 10 個數,c 語言遞迴實現。

#include

#include

#include

void swap(int *x, int *y)

void quick_sort_recursive(int arr, int start, int end)

elseleft++;

if (left)

quick_sort_recursive(arr, left + 1, end);

}void quick_sort(int arr, int len)

int main()

12樓:

public static void main(string args) ;

int aftersort = fastsort(s, 0, 11);

* 1.先從數列中取一個基準數。

* 2.分割槽:將比這個數大的放右邊,小的放左邊* 3.對左右區間重複第2步,直到各區間只有一個數* @param s

* @param l

* @param r

*/private static int fastsort(int s, int l, int r)

s[i] =x;

fastsort(s, l, i - 1); 遞迴呼叫fastsort(s, i + 1, r);

}return s;

c的stl的sort函式是什麼排序,快速排序嗎

不是簡單的快排 stl的sort 演算法,資料量大時採用quick sort,分段遞迴排序,一旦分段後的資料量專小於某個門檻,為避屬免quick sort的遞迴呼叫帶來過大的額外負荷,就改用insertion sort。如果遞迴層次過深,還會改用heap sort。stl的sort 演算法,抄 資料...

古代官位等級排序是怎麼排的

古代官位等級排序如下 1.三公制度,最早出現於西周,那時三公指的是 太師 太傅 太保。這三種職位都是虛職,沒有實權。相當於現在的褲悔榮譽頭銜。2.秦朝時期,三公指的是 丞肢團相 太尉 御史大夫。丞相負責行政,太尉負責軍事,御史大夫負責監察。3.漢朝時期,西漢的三公分別是 太尉 丞相 御史大夫。其中丞...

國企公司的官職是怎樣排的 國企職位怎麼排序的

國企 最高董事長 總裁 副總裁 總經理 副總經理 經理 副經理 經理助理 主管 專員 技術類 助理 組長 副組長 領班 員工。國企一般分為管理部門和創收部門。管理部門有 總經理直接主管的有三個部門 綜合辦公室 管理公司綜合事務,幫助領匯出謀劃策 對其他所有部門進行監督 組織召開各種會議 接收上級公司...