寫好最簡單的選擇排序

2021-08-27 13:25:56 字數 830 閱讀 5909

選擇排序,所有排序演算法中最簡單的乙個,不是嘛,如果有哪本程式設計書中沒有直接或者間接的含有這個演算法,真的換一本吧:),在此僅以此部落格記錄一下,我所認識的選擇排序。

選擇排序,為什麼取這個名?

之所以叫選擇排序,是因為每次都是要從剩餘的序列中選擇乙個最大(最小)的元素將其放在最終位置(有序時元素所在的位置)

選擇排序的思路(從小到大排序)

1:從序列的第k+1個元素開始,找到序中最小的元素(k=0)

2:將最小的元素與第k個元素進行比較,如果比第k個元素小,則進行交換,否則不交換

3:從第k+1個元素開始,重複上述過程

時間複雜度

迴圈計算變數從0開始,則演算法每次迴圈選擇乙個最小值均需要的比較次數為n-i-1,故總共的比較次數為n(n-1)/2,同時由於每次迴圈都有可能做交換操作,幫最多進行的交換操作次數為n-1次,幫時間複雜度為o(n^2)

空間複雜度

空間複雜度為0(1),需要乙個交換變數,下面可以看到,可以連這1空間的變數都不需要,將**一與**三結合,但會影響效率

演算法的穩定性

選擇排序是不穩定的,你想想這樣的乙個序列5,5,2,從小往大排序好,第一5就在第二個5的後面,所以是不穩定的。

最容易想到的方法

void selectsort(int *a ,int n)

}}

效率高一點的演算法

void selectsort(int *a ,int n)

{ int tmp;

for(int i=0;i

void selectsort(int *a ,int n)

{ for(int i=0;i

寫好最簡單的氣泡排序

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

寫好最簡單的氣泡排序

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

寫好最簡單的插入排序

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