寫好最簡單的氣泡排序

2021-08-27 13:25:56 字數 1185 閱讀 5116

氣泡排序,真的很簡單,不是嘛,如果給你15分鐘,也許你會很快就寫出來乙個,真的,我相信你,而且說不定考慮的還是相當周全滴,在此僅以此部落格記錄一下,我所認識的氣泡排序。

氣泡排序,為什麼取這個名?

你可以想想池塘裡的氣泡,從最底部向最上部浮起的過程,是不是由小變大的過程中,這是乙個物理知識,就不用說了吧,不知道的,回去看看初中科本吧,因此浮到水面的氣泡是不是最大的,這也就是取名冒泡的原因啦,浮到最上面的就是最大的,當然你別認為冒泡只能實現從小到大排序,大與小本身就是一種相對概念~

氣泡排序的思路(從小到大排序)

1:比較相鄰的元素,如果第乙個元素比第二個元素小,就將其交換之

2:對每一對相鄰元素都做同樣的工作,從第一對直至最後一對

3:做完第2步,這裡最大的元素已經浮至最上面的位置,去除最後乙個元素,重新執行上面的步驟,如果所有相鄰元素的比較過程中均沒有交換發生,排序完成。

氣泡排序的時間複雜度

最好的情況下,是待排序的元素已經處於有序的狀態,這裡只需要n-1次比較就可以了,也不需要進行元素的交換,因此最好時間複雜度為o(n)

最壞的情況下,是待排序的元素處於逆序的狀態,因此每次迴圈都需要進行n-i-1次比較,根據數學知識(高中的)可以得知總共需要的比較次數是n*(n-1)/2,對於每次的比軟均需要3次移動交換操作,因此總共的移動交換運算元為3n*(n-1)/2.因此總共的時間複雜度為o(n^2)

因此演算法的平均時間複雜度為o(n^2)

氣泡排序的空間複雜度

空間複雜度這個很好計算,看一眼就知道了吧,整個程式中就用到了乙個變數,用於交換用,因此空間複雜度為o(1),但是不一定呦,下面有程式二將空間複雜度降為0

氣泡排序的穩定性

穩定性,這個也是顯然的,是穩定的,兩個相鄰元素,如果是相等的,就不進行交換,除非是你有意為之~~~

普通的氣泡排序源程式

void bubblesort(int *a ,int n)

} if(flag)

break;

} return ;

}

更快的空間複雜度為0的氣泡排序

void bubblesort(int *a ,int n)

} if(flag)

break;

} return ;

}

上面**用到了異或操作,降低演算法空間複雜度

寫好最簡單的氣泡排序

氣泡排序,真的很簡單,不是嘛,如果給你15分鐘,也許你會很快就寫出來乙個,真的,我相信你,而且說不定考慮的還是相當周全滴,在此僅以此部落格記錄一下,我所認識的氣泡排序。氣泡排序,為什麼取這個名?你可以想想池塘裡的氣泡,從最底部向最上部浮起的過程,是不是由小變大的過程中,這是乙個物理知識,就不用說了吧...

寫好最簡單的選擇排序

選擇排序,所有排序演算法中最簡單的乙個,不是嘛,如果有哪本程式設計書中沒有直接或者間接的含有這個演算法,真的換一本吧 在此僅以此部落格記錄一下,我所認識的選擇排序。選擇排序,為什麼取這個名?之所以叫選擇排序,是因為每次都是要從剩餘的序列中選擇乙個最大 最小 的元素將其放在最終位置 有序時元素所在的位...

寫好最簡單的插入排序

直接插入排序,也是很常見的演算法,每本資料結構的書上應該都有這個演算法,如果沒有,你就扔了這本書吧,換一本吧 直接插入排序,為什麼取這個名字?直接插入排序取這個名字,也是很容易理解的,每次都是取出乙個元素,插入前面已經排好序的元素中,重複上述的步驟,直至整個序列變成有序序列。直接插入排序的演算法思路...