⑴ 各種排序法的時間復雜度到底多少
根據《演算法導論(中文版)》P83表格以及《演算法(中文版)》部分章節內容:
演算法最壞情況運行時間平均情況
冒泡&&插入&&選擇排序 n^2n^2
快速排序n^2 n*log n
希爾排序(希爾增量) n^2 n^(1.3 - 2)
堆排序 n*log n n*log n
註:希爾排序的性能依賴於選擇的增量。
⑵ 常見的排序演算法以及時間復雜度
在常見的排序演算法中,冒泡排序,選擇排序和直接插入排序都是O(N平方)的。快速排序,歸並排序,2叉排序樹排序。都是O(NLogN)的。小學生排序則是O(N)的。
⑶ 排序演算法的時間復雜度如何
排序演算法的時間復雜度是若文件的初始狀態是正序的,一趟掃描即可完成排序。
比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,是不會再交換的;如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,所以冒泡排序是一種穩定排序演算法。
次線性時間
對於一個演算法,若其匹配T(n) = o(n),則其時間復雜度為次線性時間(sub-linear time或sublinear time)。實際上除了匹配以上定義的演算法,其他一些演算法也擁有次線性時間的時間復雜度。例如有O(n)葛羅佛搜索演算法。
常見的非合次線性時間演算法都採用了諸如平行處理(就像NC1matrix行列式計算那樣)、非古典處理(如同葛羅佛搜索那樣),又或者選擇性地對有保證的輸入結構作出假設(如冪對數時間的二分搜索)。
不過,一些情況,例如在頭 log(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)) 為演算法的漸進時間復雜度,簡稱時間復雜度。
性質:
一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。
在各種不同演算法中,若演算法中語句執行次數為一個常數,則時間復雜度為O(1),另外,在時間頻度不相同時,時間復雜度有可能相同,如T(n)=n2+3n+4與T(n)=4n2+2n+1它們的頻度不同,但時間復雜度相同,都為O(n2)。
⑸ 快速排序的時間復雜度
快排的平均時間為:T(n) = k*n*lnn
時間復雜度為:O(n*logn)
⑹ 排序演算法的時間復雜度
所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量數據的處理方面。
一個優秀的演算法可以節省大量的資源。在各個領域中考慮到數據的各種限制和規范,要得到一個符合實際的優秀演算法,得經過大量的推理和分析。
空間復雜度(Space Complexity)是對一個演算法在運行過程中臨時佔用存儲空間大小的量度,記做S(n)=O(f(n))。比如直接插入排序的時間復雜度是O(n^2),空間復雜度是O(1) 。
而一般的遞歸演算法就要有O(n)的空間復雜度了,因為每次遞歸都要存儲返回信息。一個演算法的優劣主要從演算法的執行時間和所需要佔用的存儲空間兩個方面衡量。
(6)排序演算法時間復雜度擴展閱讀:
排序演算法經過了很長時間的演變,產生了很多種不同的方法。對於初學者來說,對它們進行整理便於理解記憶顯得很重要。每種演算法都有它特定的使用場合,很難通用。因此,我們很有必要對所有常見的排序演算法進行歸納。
排序大的分類可以分為兩種:內排序和外排序。在排序過程中,全部記錄存放在內存,則稱為內排序,如果排序過程中需要使用外存,則稱為外排序。下面講的排序都是屬於內排序。
內排序有可以分為以下幾類:
(1)、插入排序:直接插入排序、二分法插入排序、希爾排序。
(2)、選擇排序:直接選擇排序、堆排序。
(3)、交換排序:冒泡排序、快速排序。
(4)、歸並排序
(5)、基數排序
⑺ 排序演算法最差時間復雜度
你寫一個死循環,把電腦卡死就行了。
⑻ 所有排序演算法的時間復雜度
冒泡排序是這樣實現的:
首先將所有待排序的數字放入工作列表中。
從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大於他的下一位,則將它與它的下一位交換。
重復2號步驟,直至再也不能交換。
冒泡排序的平均時間復雜度與插入排序相同,也是平方級的,但也是非常容易實現的演算法。
選擇排序
選擇排序是這樣實現的:
設數組內存放了n個待排數字,數組下標從1開始,到n結束。
i=1
從數組的第i個元素開始到第n個元素,尋找最小的元素。
將上一步找到的最小元素和第i位元素交換。
如果i=n-1演算法結束,否則回到第3步
選擇排序的平均時間復雜度也是O(n^2)的。
⑼ 排序演算法的時間復雜度計算
你這個問題是自己想出來的吧?
第一,你指的時間復雜度是大O表示法的復雜度,也就是一個上界,但不是上確界,所以就算你以一種方式中斷排序過程,時間復雜度還是O(N*logN),假設排序過程還能執行的話。
第二,達到O(N*logN)的排序演算法,以快速排序為例,快速排序不知道你看過沒有,它不像選擇排序或者冒泡排序那樣,每一趟可以確定一直最大或者最小值,對於快速排序,每一趟排序後如果你刪掉最後一個元素將導致整個演算法失效。如果你要用這種刪除元素方法的話,只能採用冒泡排序或者選擇排序,時間復雜度是O(N^2)
所以,我猜想你是不是想做類似於在N個元素中尋找前K個最大者之類的事情(K=N-L)
如果是這樣的話,有復雜度是O(N*logK)的演算法,利用快速排序中的partition操作
經過partition後,pivot左邊的序列sa都大於pivot右邊的序列sb;
如果|sa|==K或者|sa|==K-1,則數組的前K個元素就是最大的前K個元素,演算法終止;
如果|sa|<K-1,則從sb中尋找前K-|sa|-1大的元素;
如果|sa|>K,則從sa中尋找前K大的元素。
一次partition(arr,begin,end)操作的復雜度為end-begin,也就是O(N),最壞情況下一次partition操作只找到第1大的那個元素,則需要進行K次partition操作,總的復雜度為O(N*K)。平均情況下每次partition都把序列均分兩半,需要logK次partition操作,總的復雜度為O(N*logK)。
由於K的上界是N,所以以N表示的總復雜度還是O(N*logN)
⑽ 排序演算法的時間復雜度的排序
從時間復雜度而言,O(1)肯定最好,O(n*n)最差,
O(1) < O(log2n) < O(n) < O(nlog2n) < O(n*n)