資料結構與演算法之美 排序(上)

2021-10-07 13:26:30 字數 1911 閱讀 2968

【開篇問題的解答請放到最後再看噢~】

雖然氣泡排序和插入排序演算法的時間複雜度都是o(n2),氣泡排序涉及到元素的交換,插入排序涉及到元素的移動,交換次數和移動次數都是相同的,都是原始序列的逆序度。在氣泡排序中,元素的交換要三次賦值語句,而插入排序中元素的移動只需要一次賦值語句。所以若考慮到效能優化到極致,首選插入排序,在實際的試驗中,對於相同的資料插入排序的執行時間也更快。除此之外,插入排序優化的空間也更大。

最好情況、最壞情況、平均情況時間複雜度

以及於此對應的要排序的原始資料是怎樣的。

時間複雜度的係數、常數、低階

因為當我們要排序的資料規模比較小時候,就要考慮這幾點。而且對於同一階時間複雜度的排序演算法進行對比的時候,也要考慮這幾點。

比較次數和交換(或移動)次數

對於基於比較的排序演算法,一般就是要比較大小以及交換或者移動資料,所以在分析演算法的執行效率的時候,也要把這兩點考慮進去。

氣泡排序演算法是原地排序演算法嗎?

是的,因為氣泡排序演算法只涉及相鄰元素的交換,只需要用到常數級別的臨時空間,空間複雜度是o(1),所以是原地排序演算法。

氣泡排序演算法是穩定的排序演算法嗎?

是的,我們在實現氣泡排序的時候,先比較再進行相鄰元素的交換,對於相等的兩個相鄰元素,我們就可以不交換,這樣原有的先後順序就不會被破壞了。

氣泡排序演算法的時間複雜度是多少?

最好的情況下,待排序的序列已經是有序的,那麼進行一次冒泡就可以完成排序,因此最好情況時間複雜度是o(n);最壞的情況就是,待排序的序列是完全倒序的,這就需要n次冒泡操作,因此最壞情況時間複雜度是o(n2)

一種「不嚴格」的分析平均時間複雜度的方法:

有序度的概念——就是序列中有序的元素對的個數(預設從小到大為有序)。完全有序的序列,有序度為n*(n-1)/2,也被稱作滿有序度。倒序的序列,有序度就為0。氣泡排序中的交換操作,每交換一次,有序度就加一,所以排序中的交換操作次數是固定的,就是滿有序度-初始有序度。最好情況下的交換次數是0,最壞情況下的交換次數是n*(n-1)/2,取個中間值代表平均情況,n*(n-1)/4。而複雜度的上限是o(n2),所以平均情況的時間複雜度是o(n2)

插入排序演算法是原地排序演算法嗎?

是的,因為每次移動的時候,只需要常數級別的臨時空間來儲存待插入的元素的值,所以空間複雜度就是o(1)。

插入排序演算法是穩定的排序演算法嗎?

是的,在插入排序的時候,我們從左到右遍歷資料,在進行比較確定插入位置的時候,對於相等的資料我們可以選擇插在其後面。

插入排序的時間複雜度是多少?

如果要排序的資料已經是有序的,而且我們從尾到頭在有序區間中查詢插入位置,那麼每次只需要比較一次即可,而且不需要進行移動操作,所以最好情況下時間複雜度是o(n)。如果資料都是倒序的,每次插入資料都要移動大量的資料,對應的就是最壞情況的時間複雜度為o(n2)。平均時間複雜度??

選擇排序演算法的空間複雜度?

空間複雜度是o(1),是原地排序演算法

選擇排序演算法的時間複雜度?

最好情況、最壞情況、平均情況的時間複雜度都是o(n2)。因為在最好情況下,也就是序列已經有序的時候,也要進行n次從未排序的區間中選最小元素的操作,所以時間複雜度都是o(n2)。

選擇排序演算法是穩定的排序演算法嗎?

不是穩定的排序演算法,因為選擇到未排序區間的最小元素後,將最小元素和未排序區間的第乙個元素(也就是插入到已排序區間的尾部)進行交換,這就可能破壞了相等的元素原本的先後順序。

演算法與資料結構之美 排序 上

氣泡排序 bubble sort 插入排序 insertion sort 選擇排序 selection sort 解答開篇 本篇部落格將會總結一下冒泡 插入 選擇排序,思考乙個問題就是,插入排序和氣泡排序的時間複雜度都是o n 2 但是為何在實際軟體開發中更傾向於選擇插入排序?分析排序演算法的執行效...

資料結構與演算法之排序(上)

對於冒泡這個排序演算法,相信大家都不陌生,所以我們更加深入的來看一下這個演算法,討論一下他的時間複雜度,最好情況是當所有元素都按公升序排列好了,這個時候的時間複雜度是o n 多少個元素就比較了多少次。為了不讓排序無腦的進行下去,我們加了乙個flag標記,排好序便會自動退出。最壞的情況下,都是逆序排的...

資料結構與演算法之美

什麼是資料結構?什麼是演算法 狹義重點 複雜度分析 方法 邊學邊練,適度刷題 複雜度分析 時間複雜度 常見時間複雜度 非多項式量級 非常低效的演算法 空間複雜度 漸進空間複雜度,表示演算法的儲存空間和資料規模的增長關係 最好情況時間複雜度 理想情況的時間複雜度 最壞情況時間複雜度 最糟糕的情況下的時...