關於氣泡排序的一些改進

2022-09-13 10:12:09 字數 1302 閱讀 2678

---恢復內容開始---

氣泡排序:

一般氣泡排序我們都很容易想到以下的方法,但事實上氣泡排序還有一些地方可以改進。最主要的方法是引入標誌位。

(最後一行是輸出的結果)

改進方案一

看到上面執行結果,第4,5,6,7趟都是沒有發生逆序對的互換,但演算法還是依舊進行了比較。

為此,引入乙個排序標誌。

(最後一行是輸出的結果)

由此可見,到第4趟發現沒有逆序對了,就會停止。

假設這段有序的區間是[0,n1/2),那麼按照這個演算法算出來的複雜度就是 o(n2/3) ,即 n*n1/2

改進方案二(比方案一更優化)

由方案一我們得到啟發,如果我們能夠對已經排好序的部分不再去比較的話,那麼效能會更好。例如

假設int arr[12] = ;

如果我們得到6的位置的話,那麼6之後的我們就不去比較了。

那6這個位置怎麼得到呢?

我們可以設定乙個變數,記錄最後一次逆序對發生變化的位置。得到的就是排好序的部分裡面排在最前的位置,也就是6的位置。

如上圖,進行過一趟比較之後,我們就記錄好了6的位置,也就是第6位。那麼此後我們就不管6之後的資料了。

改進的氣泡排序

改進的氣泡排序 按照公升序的方式對陣列進行排序,此處我們通過新增標記位,對陣列中已經有序的序列不再排序,加快了排序的速度 author iamwiam public class bubble public static void main string args bubblesort a for i...

關於排序的一些整理

第一部分 stl中的sort排序 在stl中,排序是通過使用函式模板sort來完成的。這裡給出一些使用的例子 sort v.begin v.end 整個容器v按非降序排列 sort v.begin v.end greater 將整個容器降序排列 sort v.begin v.begin v.end ...

雙向氣泡排序(氣泡排序的改進優化)

思想 雙向氣泡排序 首先從前往後兩個兩個比較把大的數移到最後乙個位置,然後從後往前兩個兩個比較把小 的的數後往前推到陣列第乙個位置,這一過程就是第一輪這個時候第乙個位置就是陣列的 最小值,最後乙個位置就是陣列的最大值了然後把front behind 在front與 behind之間再重複操作上述過程...