各種排序和查詢複雜度

2021-09-08 17:58:03 字數 1377 閱讀 2427

排序方法        平均情況        最好情況        最壞情況        輔助空間        穩定性

氣泡排序         o(n^2)           o(n)              o(n^2)            o(1)                穩定

選擇排序         o(n^2)          o(n^2)            o(n^2)            o(1)              不穩定

插入排序         o(n^2)           o(n)              o(n^2)            o(1)                穩定

希爾排序o(n*log(n))~o(n^2) o(n^1.3)       o(n^2)            o(1)              不穩定

堆排序          o(n*log(n))     o(n*log(n))    o(n*log(n))       o(1)              不穩定

歸併排序       o(n*log(n))     o(n*log(n))    o(n*log(n))       o(n)                穩定

快速排序       o(n*log(n))     o(n*log(n))      o(n^2)            o(1)              不穩定

氣泡排序經過優化以後,最好時間複雜度可以達到o(n)。設定乙個標誌位,如果有一趟比較中沒有發生任何交換,可提前結束,因此在正序情況下,時間複雜度為o(n)。

選擇排序在最壞和最好情況下,都必須在剩餘的序列中選擇最小(大)的數,與已排好序的序列後乙個位置元素做交換,依次最好和最壞時間複雜度均為o(n^2)。

插入排序是在把已排好序的序列的後乙個元素插入到前面已排好序(需要選擇合適的位置)的序列中,在正序情況下時間複雜度為o(n)。

堆是完全二叉樹,因此樹的深度一定是log(n)+1,最好和最壞時間複雜度均為o(n*log(n))。

歸併排序是將大陣列分為兩個小陣列,依次遞迴,相當於二叉樹,深度為log(n)+1,因此最好和最壞時間複雜度都是o(n*log(n))。

快速排序在正序或逆序情況下,每次劃分只得到比上一次劃分少乙個記錄的子串行,用遞迴樹畫出來,是一棵斜樹,此時需要n-1次遞迴,且第i次劃分要經過n-i次關鍵字比較才能找到第i個記錄,因此時間複雜度是\sum_^(n-i)=n(n-1)/2,即o(n^2)。

查詢複雜度:

各種排序和查詢複雜度

排序方法 平均情況 最好情況 最壞情況 輔助空間 穩定性 氣泡排序 o n 2 o n o n 2 o 1 穩定 選擇排序 o n 2 o n 2 o n 2 o 1 不穩定 插入排序 o n 2 o n o n 2 o 1 穩定 希爾排序o n log n o n 2 o n 1.3 o n 2 ...

各種查詢 排序的時間複雜度

各種查詢 排序的時間複雜度 1 氣泡排序 氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以相同元素的前後順序並沒有改變,所以氣泡排序是一種穩定排序演算法。2 選擇排序 選擇排序是給每個位置選擇當前元素最小的,比如給第乙個位置選擇最小的。例子...

各種查詢和排序的定義及時間複雜度

氣泡排序是穩定的,演算法時間複雜度是o n 2 2.2 選擇排序 selection sort 選擇排序的基本思想是對待排序的記錄序列進行n 1遍的處理,第i遍處理是將l i.n 中最小者與l i 交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。選擇排序是不穩定的,演算法複雜度是o...