電腦程式設計中快速排序的時間複雜度n log n 是n log n 還是什麼

2021-03-19 08:41:52 字數 3854 閱讀 1447

1樓:匿名使用者

問題中兩者選擇的答案是相同的,且是正確的,n log n 即等於n*log(n),其中*代表乘,預設底數為

2.快速排序的複雜度為log以2為底,n^2的對數,也就是o(n^2),如排序10個數,最壞的情況就是o(10^2)=o(100)≈33

2樓:

快速排序的平均複雜度是在n*log2(n)也就是nlog(n),在資訊學中nlog(n)的底數預設為2。至於說快速排序10個數的時間複雜度,是沒辦法計算的,這個還是和這10個數的初始順序有關。只能說排序10個數的平均複雜度在10*log2(10),如果這個10個序列差勁,複雜度也有可能是o(10^2)。

(快速排序的最壞情況下的時間複雜度是o(n^2))

3樓:匿名使用者

複雜度的表示式裡面只看冪級不看具體底數,log n跟log2n是一回事,感覺你有些概念不清的樣子,時間複雜度的n就表示演算法處理的數字個數,快速排序的時間複雜度就是n log n,快速排序10個數的時間複雜度也還是n log n,你可以說n=10,但是時間複雜度的表示式裡面要求把具體的輸入個數用n表示,因為這樣才能反映出演算法在輸入個數增加的時候執行時間相應增加的程度,也就是「時間複雜度」這個概念本身想說明的問題。

4樓:謙謙知臨

資料結構中logn一般表示2為底數,如果不是的話,才會明確標明。

快速排序的時間複雜度為n*log n,請教一下n是代表什麼,麻煩講通俗一點,不要百度照搬

5樓:90李鵬

不知道你的數學基礎如何,我簡單描述一下。

前提定義

待陣列的元素個數為n

背景介紹

何為快速排序?是否寫過快速排序的**?至少這個你需要事先有所知道,要不然也僅僅是停留在記憶的層面,而不理解它為n*lgn的原因。

快速排序演算法:

主要分為以下三個部分

1,partittion

2,quicksort前一部分

3,quicksort後一部分

簡單說來就是,partition從要排序的陣列中選取一個樞紐,例如即為pivot,然後將陣列中比pivot小的元素放到它的左邊,將比pivot大的元素放到它的右邊(如果是遞增排序的話)。因此根據時間複雜度的概念,這個partition的時間複雜度為n,這裡的n就是你partition方法處理的資料長度。

為何partition的時間複雜度為n?

看你的問題,既然問到了n,我就解釋一下partition為什麼會是n的時間複雜度。paritition方法選取樞紐,這個一般拿陣列元素的第一個即可,這個不需要任何的迴圈操作,直接取值即可,換句話說這個時間複雜度是1,然後需要遍歷陣列,將比pivot大的元素放到右邊,比pivot小的元素放到左邊,這個至少要遍歷整個陣列,然後對每一個元素進行操作決定是否移動,處理一個元素的時間複雜度為1,現在有n個元素要處理,故而parition方法的時間複雜度為n。

為何快速排序的時間複雜度為n*lgn?

根據背景介紹中的演算法描述,可以寫出如下的遞推公式:

f(n) = 2 * f(n/2) + n

對上述函式進行解釋如下:

f(n)代表對n個元素進行排序處理所花費的時間(當然只是一個抽象的時間概念)

根據演算法描述的三步,第一步partition就是等式右邊的n,第二步和第三步中的quicksort就是等式右邊的2 * f(n/2)。為什麼是n/2 ? 這個應該很容易理解,partition將陣列分成兩部分,下面的quicksort分別排序前一部分和後一部分,此處我們假設這個拆分是完全等分的,也就是說前一部分和後一部分都是n/2。

對上述等式進行時間複雜度的運算如下:

f(n) = 2 * f(n/2) + n = 2 * ( 2 * f(n/4) + n/2 ) + n

= 4 * f(n/4) + 2 * n

希望你能看出這個推導,就是直接的代入而已,下面我不再繼續了,可以看出每一次它等式右邊就多出了一個n, 由於每次操作是進行除以2的操作,故而最多進行lgn,也就是說最終的運算結果: f(n) = k* f(1) + lgn*n。

好了,囉囉嗦嗦.

時間複雜度o(n)和o(n log n)哪個快

6樓:匿名使用者

0(n)比0(n*log(2,n))快。不要去討論n的值,多個時間複雜度比較,n都是取很大的值,這個時候就與輸入規模無關了。對單個的時間複雜度討論的時候,才會去考慮n的輸入規模。

7樓:木野輕風

當n<=2時,兩者相等;

當n>3時,log n>1,所以n log n>n*1,即n log n>n;

當n變得很大時,o(n log n)比o(n)會大很多

8樓:匿名使用者

看n的大寫,如何logn的結果是小於等於1的。後者快。不然前者快

c語言時間複雜度裡的 lg n與log2 n是一樣的嗎?

9樓:尋魂

都是對的哦~因為實際的需要,對數的值可以根據數量級改變,方便統計比較為主的。當然lg n和log2n數值時不等的,在你比較一類演算法的複雜度的時候,取對數的底數必須一樣才有可比性,所以只是方便比較用,都是正確的。

10樓:匿名使用者

它們相差常數倍。lon2 n=ln n/ln 2.但就數量級而言,它們是相同的

歸併排序的時間複雜度o(n*log n)是怎麼得來的,求大神詳細的講解一下 30

11樓:碧血玉葉花

首先你說歸併排序最壞的情形為o(nlogn),這是不正確的歸併排序如果不借助輔助空間的話,複雜度為o(n^2),藉助的話就是o(nlogn)(o(nlog2n))歸併排序 平均複雜度是 o(nlogn) 比較快

快速排序快速排序的最壞情況基於每次劃分對主元的選擇。基本的快速排序選取第一個元素作為主元。這樣在陣列已經有序的情況下,每次劃分將得到最壞的結果。

一種比較常見的優化方法是隨機化演算法,即隨機選取一個元素作為主元。這種情況下雖然最壞情況仍然是o(n^2),但最壞情況不再依賴於輸入資料,而是由於隨機函式取值不佳。實際上,隨機化快速排序得到理論最壞情況的可能性僅為1/(2^n)。

所以隨機化快速排序可以對於絕大多數輸入資料達到o(nlogn)的期望時間複雜度。一位前輩做出了一個精闢的總結:「隨機化快速排序可以滿足一個人一輩子的人品需求。

」隨機化快速排序的唯一缺點在於,一旦輸入資料中有很多的相同資料,隨機化的效果將直接減弱。對於極限情況,即對於n個相同的數排序,隨機化快速排序的時間複雜度將毫無疑問的降低到o(n^2)。解決方法是用一種方法進行掃描,使沒有交換的情況下主元保留在原位置。

綜合來說快速排序速度最快,時間複雜度最小。希望對你有所幫助!

12樓:汗滌袁希月

搜一下:歸併排序的時間複雜度o(n*log

n)是怎麼得來的,求大神詳細的講解一下

13樓:兔子s歲月

首先,你要理解兩個長度為n/2的的陣列做歸併,這個時間複雜度是o(n)。

然後,因為歸併排序要不斷的把原來陣列分成兩份,這個遞迴的過程是o(logn)。比如說你想要排序的陣列長度為8,然後不斷一的一分為二,就是8——>4——>2——>1。一共拆了3次,2^3 = 8,或者3是以二為底的8的對數。

log就是這樣來的。

然後兩個再相乘,時間複雜度了就是o(nlogn)了。

這個程式為什麼時間複雜度是log2n呢 請各位指教

14樓:匿名使用者

2的log n次方等於n,i=i*2中的數字2就代表log中的底,如果i=i*3,那麼底就是3。意思就是i要經過logn次迴圈運算才能達到停止條件,也就是i>n

電腦程式設計軟體有哪些,電腦常用的程式設計軟體有哪些?

電腦常用的程式設計軟體有哪些?電腦常用的程式設計軟體有matlab,visual c r軟體等等。電腦常用的程式設計軟體還是有很多的,比如說vscode,webstrome還有前端經常用的h builder等等。非常多,但是許多都是需要付費利息購買的。計算機語言的種類非常的多,總的來說可以分成機器語...

電腦程式設計如何作用在生活中的各種機械和電子產品上

建議去學一下微控制器。微控制器是指一個整合在一塊晶片上的完整計算機系統。儘管他的大部分功能整合在一塊小晶片上,但是它具有一個完整計算機所需要的大部分部件 cpu 記憶體 內部和外部匯流排系統,目前大部分還會具有外存。同時整合諸如通訊介面 定時器,實時時鐘等外圍裝置。而逗配現在最強大的微控制器系統甚至...

以後學習程式設計的問題,學習電腦程式設計以後到底能做什麼

最近很多人都在問如何學習程式設計。我覺得學習程式設計最重要的是入門,如果你入門的時候有一個好的方法和思路,打下比較紮實的基礎,對今後的程式設計工作是很有益處的。即使在學習新的程式語言也無所謂,因為它們有很多相通之處,可以相互借鑑。我認為可以先學習一下pascal,這個語言比較嚴謹,適合初學者。pas...