1樓:匿名使用者
對於排序
演算法,平均時間複雜度
插入排序 o(n^2)
氣泡排序 o(n^2)
選擇排序 o(n^2)
快速排序 o(n log n)
堆排序 o(n log n)
歸併排序 o(n log n)
基數排序 o(n)
希爾排序 o(n^1.25)
有一個時間複雜度的排列順序,依次為
ο(1)<ο(log2n)<ο(n)<ο(nlog2n)<ο(n2)<ο(n3)<…<ο(2n)<ο(n!)ο(1)表示基本語句的執行次數是一個常數,一般來說,只要演算法中不存在迴圈語句,其時間複雜度就是ο(1)。ο(log2n)、ο(n)、ο(nlog2n)、ο(n2)和ο(n3)稱為多項式時間,而ο(2n)和ο(n!
)稱為指數時間。電腦科學家普遍認為前者是有效演算法,把這類問題稱為p類問題,而把後者稱為np問題。
2樓:匿名使用者
^方式: 平均 最壞 最好
插入 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) d(n+r) d(n+r)
其中最壞為nlogn的有 堆排 和 歸併
以下排序演算法最壞情況下時間複雜度最低的是 a.氣泡排序 b.插入 c.選擇 d.快排
3樓:木頭釋然
在氣泡排序,插入排序,選擇排序,快速排序中,在最最壞情況下,快速排序的時間複雜為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)
4樓:匿名使用者
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。
快速排序通過一趟掃描,就能確保某個數(以它為基準點吧)的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有一個元素為止。
幾種排序的時間複雜度,可以參考一下
5樓:匿名使用者
這幾個的最壞情況下的時間複雜度都是一樣的,一定要比較的話快排比較快,但氣泡排序比較穩定,最壞的話都是一樣的
6樓:匿名使用者
顯然都一樣,如果論平均時間就是快排最快o(nlogn),其餘的都是o(n^2),但快排最壞時間也是o(n^2)
7樓:匿名使用者
最壞的情況下好像都是n^2吧。
11、在基於排序碼比較的排序演算法中,( )演算法的最壞情況下的時間複雜度不高於o(nlog2n)。 a. 起泡排序 b.
8樓:謝浩
排序抄方法 最壞時間複雜度
bai 最好時間複雜du度 平均時間複雜度zhi
直接插入 o(n2) o(n) o(n2)
簡單選擇 o(n2) o(n2) o(n2)
起泡排序dao 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)的是
9樓:匿名使用者
a。(在堆
bai排序和快速排序中du,若原始記錄接近正zhi序或反序,則選用dao_堆排序____,若專原始記錄無序,則最屬好選用__快速排序___。)
c錯了。c的原題是下列排序法中,時間複雜度不收資料初始狀態影響,總是為o(n2)的是__直接選擇排序 ____。
10樓:匿名使用者
選a。bcd最差情況是o(n^2);
11樓:匿名使用者
o(n*logn)這個是什麼意思!
請問一下:有誰能總結資料結構中排序章內介紹各種演算法的時間複雜度呀,很急。。。
c語言,程式設計演算法最壞情況下的時間複雜度可以與平均情況的時
最差情況下的復 雜度是所有可能的輸入資料所消耗的最大資源,如果最差情況下的複雜度符合我們的要求,我們就可以保證所有的情況下都不會有問題。某些演算法經常遇到最差情況。比如一個查詢演算法,經常需要查詢一個不存在的值。也許你覺得平均情況下的複雜度更吸引你,可是平均情況也有幾點問題。第一,難計算,多數演算法...
演算法時間複雜度與執行時間的關係演算法的空間複雜度於時間複雜度的關係?
我來舉個例子說明 比如一種排序演算法的時間複雜度是 o n 那麼執行時間就是正比於要素個數n,另一種排序演算法的時間複雜度是o n logn 那麼執行時間就正比於n logn 所以n足夠大的情況下,總是第一種演算法快.但是,如果n不是很大,那麼具體的運算時間並不一定都是前一種演算法快,比如剛才的第一...
時間複雜度的定義,C 中時間複雜度是什麼意思
1 時間複雜度 1 時間頻度 一個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...