---恢復內容開始---
氣泡排序:
一般氣泡排序我們都很容易想到以下的方法,但事實上氣泡排序還有一些地方可以改進。最主要的方法是引入標誌位。
(最後一行是輸出的結果)
改進方案一
看到上面執行結果,第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之間再重複操作上述過程...