- N +

快速排序算法遞歸(不用遞歸實(shí)現(xiàn)快速排序)

大家好,關(guān)于快速排序算法遞歸很多朋友都還不太明白,今天小編就來(lái)為大家分享關(guān)于不用遞歸實(shí)現(xiàn)快速排序的知識(shí),希望對(duì)各位有所幫助!

排序復(fù)雜度怎么算

1、排序復(fù)雜度可以用大O表示法來(lái)標(biāo)記,通常會(huì)用到最壞情況的時(shí)間復(fù)雜度,即O(n^2)或O(nlogn)等。2、排序復(fù)雜度的原因在于排序算法的實(shí)現(xiàn)需要對(duì)比和交換元素,而這些操作的次數(shù)取決于輸入數(shù)據(jù)的個(gè)數(shù)和數(shù)據(jù)的排列情況,因此不同的排序算法時(shí)間復(fù)雜度也會(huì)有所差別。3、在實(shí)際使用中,我們需要根據(jù)數(shù)據(jù)規(guī)模和處理效率來(lái)選擇更加適合的排序算法。例如,當(dāng)數(shù)據(jù)量較小時(shí),可以選擇冒泡排序或插入排序;而當(dāng)數(shù)據(jù)量較大時(shí),可以考慮使用快速排序、歸并排序等更高效的算法來(lái)提高排序速度。

快速排序的時(shí)間復(fù)雜度是怎么算出來(lái)的

快速排序法的時(shí)間復(fù)雜度是nlogn(n×log以2為底n的對(duì)數(shù))

拓展:

快速排序(Quicksort)是對(duì)冒泡排序的一種改進(jìn)。

快速排序由C.A.R.Hoare在1962年提出。它的基本思想是:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。

附各種排序法的時(shí)間復(fù)雜度如下:

相同數(shù)字比較多怎么排序的

當(dāng)有較多相同數(shù)字需要排序時(shí),可以使用多重排序方法,即先按照一個(gè)關(guān)鍵字排序,再按照第二個(gè)關(guān)鍵字排序,以此類推,直到按照所有關(guān)鍵字排序完成。以下是幾種實(shí)現(xiàn)多重排序的方法:

1.冒泡排序:對(duì)于兩個(gè)元素,先按照第一個(gè)關(guān)鍵字排序,如果相等則按照第二個(gè)關(guān)鍵字排序,以此類推,直到最后一個(gè)關(guān)鍵字。逐步比較交換相鄰元素的位置,先把最大的數(shù)字交換到最后,然后在剩下的列表中重復(fù)此過程,直到整個(gè)列表都被排序。

2.快速排序:選取一個(gè)基準(zhǔn)元素,并把數(shù)據(jù)分成兩部分,一部分小于基準(zhǔn)元素,一部分大于基準(zhǔn)元素。然后,針對(duì)第二個(gè)關(guān)鍵字對(duì)兩個(gè)部分分別遞歸進(jìn)行快速排序,以此類推,直到所有關(guān)鍵字都排序完成。

3.歸并排序:將給定的列表分成較小的子列表,然后遞歸地對(duì)每個(gè)子列表進(jìn)行排序。然后,將相鄰的兩個(gè)有序子列表合并成一個(gè)有序的列表,直到所有關(guān)鍵字都排序完成。

需要注意的是,在實(shí)現(xiàn)多重排序時(shí),需要先確定具體的排序規(guī)則和關(guān)鍵字,以確保準(zhǔn)確地排序。在考慮排序規(guī)則和關(guān)鍵字時(shí),可以根據(jù)具體的需求選擇不同的方法。

遞歸算法經(jīng)典實(shí)例

遞歸算法是一種用于解決復(fù)雜問題的算法,它通過重復(fù)調(diào)用自身來(lái)解決問題,它的基本思想是將一個(gè)復(fù)雜的問題分解成一系列的相對(duì)簡(jiǎn)單的子問題,然后逐個(gè)解決子問題,最終得到最終的解決方案。經(jīng)典實(shí)例有漢諾塔問題、快速排序算法、二叉樹的遍歷算法、求解斐波那契數(shù)列等。

什么是快速排序

1.如何理解快速排序

快速排序是對(duì)冒泡排序的一種改進(jìn),它是不穩(wěn)定的。由C.A.R.Hoare在1962年提出的一種劃分交換排序,采用的是分治策略(一般與遞歸結(jié)合使用),以減少排序過程中的比較次數(shù),它的最好情況O(nlogn),最壞情況O(n^2),平均時(shí)間復(fù)雜度為O(nlogn)。分而治之不是一種解決問題的算法,而是一種希望問題分解,將復(fù)雜的問題劃分為多個(gè)簡(jiǎn)單問題來(lái)解決的思想。

?

快速排序的基本思想:

?

選擇一個(gè)基準(zhǔn)數(shù),通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小。然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過程可以遞歸進(jìn)行,以達(dá)到全部數(shù)據(jù)變成有序。

?

快速排序的步驟:

?

(1)從數(shù)列中挑出一個(gè)"基準(zhǔn)值"(pivot)。

(2)重新排序數(shù)列,所有元素比基準(zhǔn)值小的擺放在基準(zhǔn)前面,所有元素比基準(zhǔn)值大的擺在基準(zhǔn)的后面(相同的數(shù)可以到任一邊)。在這個(gè)分區(qū)退出之后,該基準(zhǔn)就處于數(shù)列的中間位置。這個(gè)稱為分區(qū)(partition)操作。

(3)遞歸地(recursive)把小于基準(zhǔn)值元素的子數(shù)列和大于基準(zhǔn)值元素的子數(shù)列排序。

?

注意:基準(zhǔn)元素/左游標(biāo)/右游標(biāo)都是針對(duì)單趟排序而言的,也就是說(shuō)在整個(gè)排序過程的多趟排序中,各趟排序取得的基準(zhǔn)元素/左游標(biāo)/右游標(biāo)一般都是不同的。對(duì)于基準(zhǔn)元素的選取,原則上是任意的,但是一般我們選取數(shù)組中第一個(gè)元素為基準(zhǔn)元素(假設(shè)數(shù)組隨機(jī)分布)。

?

2.快速排序的過程描述

(1)選擇最右邊的元素為基準(zhǔn)數(shù)7;

(2)將小于7的放在左邊,大于7的放在右邊,然后將基準(zhǔn)數(shù)放到中間;

(3)然后再重復(fù)操作從左邊的數(shù)組選擇一個(gè)基準(zhǔn)點(diǎn)2;

(4)3比2大則放到基準(zhǔn)樹的右邊;

(5)右邊的數(shù)組也是一樣選擇12作為基準(zhǔn)數(shù),15比12大所以放到了12的右邊;

(6)最后出來(lái)的結(jié)果就是從左到右2,3,7,12,15了。

好了,本文到此結(jié)束,如果可以幫助到大家,還望關(guān)注本站哦!

返回列表
上一篇:
下一篇: