排序時間複雜度問題
面試時被問到氣泡排序,選擇排序和快速排序的時間複雜度問題,由於自己基礎不紮實,當場懵逼,這件事一直讓我反思了好幾天。
可能你會正確地寫出這幾種排序,可能你會背過別人給你說的時間複雜度。我也是這樣。
先說氣泡排序:
氣泡排序不管序列是怎樣,都是要比較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就是陣列的長度。但是經常有時是,不需要將所有...