時間複雜度為On的排序演算法,你會嗎

2021-03-04 09:15:33 字數 5110 閱讀 7870

1樓:匿名使用者

排序方法 最壞時間複雜度 最好時間複雜度 平均時間複雜度直接插入 o(n2) o(n) o(n2) 簡單選擇 o(n2) o(n2) o(n2) 起泡專排序屬 o(n2) o(n) o(n2) 快速排序 o(n2) o(nlog2n) o(nlog2n) 堆排序 o(nlog2n) o(nlog2n) o(nlog2n) 歸併排序 o(nlog2n) o(nlog2n) o(nlog2n)

下列排序演算法中,不受資料初始狀態影響,時間複雜度為o(n*logn)的是

2樓:匿名使用者

a。(在堆

bai排序和快速排序中du,若原始記錄接近正zhi序或反序,則選用dao_堆排序____,若專原始記錄無序,則最屬好選用__快速排序___。)

c錯了。c的原題是下列排序法中,時間複雜度不收資料初始狀態影響,總是為o(n2)的是__直接選擇排序 ____。

3樓:匿名使用者

選a。bcd最差情況是o(n^2);

4樓:匿名使用者

o(n*logn)這個是什麼意思!

快速排序方法的時間複雜度為o(n^2)=n(n-1)/2中o()是什麼意思? 200

5樓:匿名使用者

o(1): 表示演算法

的執行時間為常量

o(n): 表示該演算法是線性演算法

o(㏒2n): 二分查詢演算法

o(n2): 對陣列進行排序的各種簡單演算法,例如直接插入排序的演算法。

o(n3): 做兩個n階矩陣的乘法運算

o(2n): 求具有n個元素集合的所有子集的演算法o(n!):

求具有n個元素的全排列的演算法o(n²)表示當n很大的時候,複雜度約等於**²,c是某個常數,簡單說就是當n足夠大的時候,n的線性增長,複雜度將沿平方增長。

一個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。

一個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n)。

一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n))

為演算法的漸進時間複雜度,簡稱時間複雜度。

6樓:匿名使用者

1)對於你的問題簡單解釋如下:

理論計算機研究中,衡量演算法一般從兩個方面分析:時間複雜度和空間複雜度。空間複雜度跟時間複雜度是類似的,下面簡單解釋一下時間複雜度:

對於一個資料規模為n的問題,解決該問題的演算法所用時間可以用含有n的函式t(n)來表示。對於絕大多數情況,我們只需要瞭解演算法的一般效能而不考慮細節,也就是說,我們只關心函式t(n)的表示式的形式,而不關心表示式的常數係數等與資料規模沒有關係的量值。對於函式t(n),我們又進一步將它簡化為o(n),即只考慮演算法平均執行時間的「瓶頸」,也就是t(n)表示式中,關於變數n增長最快的哪一項。

比如下面的**:

for(int i=1; i<=n*2; i++)for(int j=1; j<=n; j++)// do something here

那麼這個演算法的時間複雜度就是o(n^2),因為它有兩層迴圈,每層迴圈的資料規模都是n。注意第一層迴圈(外迴圈)要迭代n*2次,則實際上t(n)=2*n*n,而對於o(n)來說,我們忽略了常數2,只保留了n^2。這就是大o記法的一個概括,並不精確。

對於時間複雜度的更精確、深入的解釋,可以自己查閱《演算法導論》第一章。

2)更正你的問題:快速排序演算法的時間複雜度應該為o(n lg n)。注意三種時間複雜度符號表示的不同意義!

英文字母o代表的是平均執行時間,因此對於快速排序來說應該是o(n lg n)。而使用下界函式omega或者上界函式theta則分別表示演算法執行的最快和最慢時間。對於未使用隨機化的快速排序,理論上可以證明,存在某一方法構造出一組資料使快速排序「退化」成平方複雜度演算法即theta(n^2)。

但是對於其o(n)表示法應該為o(n^2)。

〔演算法〕排序的最低時間複雜度為什麼是o(nlogn)

7樓:匿名使用者

這個首先要明確一點,只用到比較的排序演算法最低時間複雜度是o(nlogn),而

內像桶排這樣的容只需要o(r)(r為桶的大小)

為了證明只用到比較的排序演算法最低時間複雜度是o(nlogn),首先要引入決策樹。

首先決策樹是一顆二叉樹,每個節點表示元素之間一組可能的排序,它予以京進行的比較相一致,比較的結果是樹的邊。

先來說明一些二叉樹的性質,令t是深度為d的二叉樹,則t最多有2^片樹葉。

具有l片樹葉的二叉樹的深度至少是logl。

所以,對n個元素排序的決策樹必然有n!片樹葉(因為n個數有n!種不同的大小關係),所以決策樹的深度至少是log(n!),即至少需要log(n!)次比較。

而log(n!)=logn+log(n-1)+log(n-2)+...+log2+log1

>=logn+log(n-1)+log(n-2)+...+log(n/2)

>=(n/2)log(n/2)

>=(n/2)logn-n/2

=o(nlogn)

所以只用到比較的排序演算法最低時間複雜度是o(nlogn)。

8樓:超級慢

時間複雜度通常括號裡面的是頻度,就是該語句重複的次數一般情況下只需選擇一種基本操作來討論演算法的時間複雜度nlogn就是指執行的次數

具體怎麼個意思也不是太懂 數學學習的不好

連logn都忘記了....

以下排序演算法最壞情況下時間複雜度最低的是 a.氣泡排序 b.插入 c.選擇 d.快排

9樓:木頭釋然

在氣泡排序,插入排序,選擇排序,快速排序中,在最最壞情況下,快速排序的時間複雜為o(n2) ,插入排序o(n2),選擇排序o(n2),氣泡排序o(n2)。所以abcd時間複雜度是一樣的。

在快速排序演算法中,最為關鍵的就是選取一個基值,將陣列分為大於基值以及小於基值兩部分,並返回基值所以在位置以利用於遞迴劃分。

對陣列a,設需要劃分的其中一段為a[p]~a[r],我們期待的結果是得到一個q,其中p<=q<=r,使得a[p]~a[q-1]<=a[q]<=a[q+1]~a[r],這個時候原先的一段陣列被分成了三部分。

首先,設基值為這段陣列的最後一個元素a[r],我們希望最後得到的結果是a[r]現在對應的值在演算法結束後可以排在比他大和小的兩部分的中間愛。

然後令i=p-1; j=p,當發現有a[j]>x時,j繼續前進,不需要任何移動。當發現a[j]<=x時,我們需要將這個元素放到小於基值的一邊,於是將i自加1,並交換此時a[i],與a[j]的元素,然後j自加1。這個時候i指向的是比基值小的那段資料的最後一個元素,j指向的是第一個還沒有判斷的剩餘元素。

上面一步不斷迴圈直到j指向了r,此時只剩下r沒有和基值判斷了,而a[r]本來就是基值,而除了a[r]以外,a[p]~a[i]是小於基值的部分,a[i+1]~a[r-1]是大於基值的部分,所以此時只需交換a[i+1]和a[r]即可。

由於對陣列a從頭到尾掃描一次就可以得到結果,因此這一部分演算法複雜度為o(n)

10樓:匿名使用者

1.選擇排序:不穩定,時間複雜度 o(n^2)

選擇排序的基本思想是對待排序的記錄序列進行n-1遍的處理,第i遍處理是將l[i..n]中最小者與l[i]交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。

2.插入排序:穩定,時間複雜度 o(n^2)

插入排序的基本思想是,經過i-1遍處理後,l[1..i-1]己排好序。第i遍處理僅將l[i]插入l[1..

i-1]的適當位置,使得l[1..i] 又是排好序的序列。要達到這個目的,我們可以用順序比較的方法。

首先比較l[i]和l[i-1],如果l[i-1]≤ l[i],則l[1..i]已排好序,第i遍處理就結束了;否則交換l[i]與l[i-1]的位置,繼續比較l[i-1]和l[i-2],直到找到某一個位置j(1≤j≤i-1),使得l[j] ≤l[j+1]時為止。圖1演示了對4個元素進行插入排序的過程,共需要(a),(b),(c)三次插入。

3.氣泡排序:穩定,時間複雜度 o(n^2)

氣泡排序方法是最簡單的排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的「氣泡」,較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個「氣泡」序列處理若干遍。

所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。如果發現兩個相鄰元素的順序不對,即「輕」的元素在下面,就交換它們的位置。顯然,處理一遍之後,「最輕」的元素就浮到了最高位置;處理二遍之後,「次輕」的元素就浮到了次高位置。

在作第二遍處理時,由於最高位置上的元素已是「最輕」元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。

4.堆排序:不穩定,時間複雜度 o(nlog n)

堆排序是一種樹形選擇排序,在排序過程中,將a[n]看成是完全二叉樹的順序儲存結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關係來選擇最小的元素。

5.歸併排序:穩定,時間複雜度 o(nlog n)

設有兩個有序(升序)序列儲存在同一陣列中相鄰的位置上,不妨設為a[l..m],a[m+1..h],將它們歸併為一個有序數列,並儲存在a[l..h]。

6.快速排序:不穩定,時間複雜度 最理想 o(nlogn) 最差時間o(n^2)

快速排序是對氣泡排序的一種本質改進。它的基本思想是通過一趟掃描後,使得排序序列的長度能大幅度地減少。在氣泡排序中,一次掃描只能確保最大數值的數移到正確位置,而待排序序列的長度可能只減少1。

快速排序通過一趟掃描,就能確保某個數(以它為基準點吧)的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有一個元素為止。

幾種排序的時間複雜度,可以參考一下

11樓:匿名使用者

這幾個的最壞情況下的時間複雜度都是一樣的,一定要比較的話快排比較快,但氣泡排序比較穩定,最壞的話都是一樣的

演算法的複雜度主要包括演算法的時間複雜度和空間複雜度,演算法的時間複雜度是指

時間複雜度考慮的是演算法的執行時間,因此是d 演算法的空間複雜度指的是什麼?1 簡單來說bai 演算法的空間du 複雜度指的是佔zhi用記憶體 dao,cpu等計算機資源回的程度。答 2 具體點來解釋就是 空間複雜度 space complexity 是對一個演算法在執行過程中臨時佔用儲存空間大小的...

演算法的時間複雜度與初始排序無關的都有什麼排序

常見的幾種排序演算法複雜度如下 方式 平均 最壞 最好 插入 n 回2 n 2 n 希爾 n 1.3 冒泡 n 2 n 2 n 快速 nlogn n 2 nlogn 選擇 n 2 n 2 n 2 堆排答 nlogn nlogn nlogn 歸併 nlogn nlogn nlogn 基數 d n r ...

演算法的時間複雜度和空間複雜度怎麼看

時間複雜度,就是計算程式執行的時間,空間複雜度,就是所佔的記憶體空間。同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。電腦科學中,演算法的時間複雜度是一個函式,它定量描述了該演算法的執行時間。這是一個關於代表演算法輸入值...