排序的最好和最壞的時間複雜度問題

2021-08-06 08:07:33 字數 688 閱讀 5113

排序時間複雜度問題

面試時被問到氣泡排序,選擇排序和快速排序的時間複雜度問題,由於自己基礎不紮實,當場懵逼,這件事一直讓我反思了好幾天。

可能你會正確地寫出這幾種排序,可能你會背過別人給你說的時間複雜度。我也是這樣。

先說氣泡排序:

氣泡排序不管序列是怎樣,都是要比較n(n-1)/2 次的,o(n2),

而對於交換次數來說,如果是陣列是有序的則,只不需要交換。如果陣列是逆序的則需要交換n(n-1)/2次,平均來說陣列要交換o(n2/4)

所以時間複雜度最好和最壞都是o(n2)

選擇排序是氣泡排序的改進

同樣選擇排序無論序列是怎樣的都是要比較n(n-1)/2次的,這是比較次數

而對於交換次數來說:如果陣列有序則不需要交換,如果逆序則要交換n次

總得來說,時間複雜度最好和最壞都是o(n2)

插入排序不同

如果序列是完全有序的,插入排序只要比較n次,無需移動時間複雜度為o(n)

如果序列是逆序的,插入排序要比較o(n2)和移動o(n2)

總得來說,時間複雜度最好的情況是o(n),最差的情況是o(n2)

快速排序

快速排序的時間複雜度最好是o(nlogn),平均也是o(nlogn),這種情況是軸樞恰好能把兩側的分開。

時間複雜度最差是o(n2),最差的情況選擇的軸樞在陣列最左側或是最右側

最好,最壞和平均時間複雜度

在查詢成功的情況下,若待查詢的資料元素恰好是陣列的第乙個元素,則只需比較一次即可找到,這就是最好情況,t n o 1 稱最好時間複雜度。若是最後乙個元素,則要比較n次才能找到。t n o n 稱最壞時間複雜度。在查詢不成功的情況下,無論何時進行不成功的查詢都需要進行n次比較,t n o n 成功查詢...

時間複雜度分析 最好 最壞 均攤

array 陣列.n array長度.x 需要查詢的值 int searchposition int array,int n,int x return pos 根據上面的演算法來說的話,如果我x的位置在array 0 那麼時間複雜度就是o 1 如果x的位置在array n 1 或者不在array中....

最好,最壞,平均時間複雜度分析

例子1public static intfind int array,int n,int x return pos 分析例子1的時間複雜度 例1的主要實現在for迴圈中的array i 上。他的時間複雜度就是來自for迴圈 所以他的時間複雜度就是o n n就是陣列的長度。但是經常有時是,不需要將所有...