数据结构——排序:插入排序、选择排序、交换排序、归并排序、基数排序
排序
內(nèi)部排序:數(shù)據(jù)量不大,在內(nèi)存中可以完成排序。
外部排序:借助外存。把數(shù)據(jù)文件分成若干塊,涉及內(nèi)外存數(shù)據(jù)的轉(zhuǎn)換、存儲器的管理等。
穩(wěn)定排序:能保證排序前兩個相等的數(shù)其在序列的前后位置順序和排序后它們兩個的前后位置順序相同。如果Ai = Aj,Ai原來在位置前,排序后Ai還是要在Aj位置前。
不穩(wěn)定排序:不是上面穩(wěn)定的情況。
穩(wěn)定的排序算法:直接插入排序、冒泡排序、歸并排序
不穩(wěn)定的排序算法:希爾排序、快速排序、簡單選擇排序、堆排序
參考:八大排序算法?https://blog.csdn.net/hguisu/article/details/7776068
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
插入排序
來一個,插一個。
如果碰見一個和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后順序沒有改變,從原無序序列出去的順序就是排好序后的順序,所以直接插入排序是穩(wěn)定的。
?
希爾排序:也是一種插入排序。
上面先增量為5,再增量為3
最后再增量為1,就是全體排序。
?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
交換排序:
冒泡排序
快速排序
選擇一個元素,放到它自己合適的位置,它的前面都比他小,他的后面都比他大。
比他小的往前站,比他大的往后站。前面和后面的順序不管。
?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
選擇排序
先選取最小的,作為第一個
再選取當(dāng)前最小的最為第二個數(shù)。
....
堆排序
一種選擇排序
堆排序是一種樹形選擇排序,是對直接選擇排序的有效改進(jìn)。
上面非終端節(jié)點(diǎn)就是非葉子節(jié)點(diǎn),中間的點(diǎn)。
首先創(chuàng)建一個堆。再輸出堆頂元素。剩下的元素再調(diào)整成堆。。。
創(chuàng)建堆過程:
1、先當(dāng)做完全二叉樹羅列起來。
2、調(diào)整成為堆:
從最后一個非終端節(jié)點(diǎn),不滿足堆就交換。不斷把小的往上推。。。。
注意上圖,49和13交換后,49下來對下面的影響,再調(diào)整。
最后,13輸出后,再把97放在最上面,再調(diào)整。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
?
歸并排序:
?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
基數(shù)排序:
說基數(shù)排序之前,先說桶排序:桶式排序是一種分配排序。
簡單來說,就是把數(shù)據(jù)分組,放在一個個的桶中,然后對每個桶里面的再進(jìn)行排序(不管什么方式)。
基數(shù)排序:(用多趟桶排序)
對數(shù)字型或字符型的單關(guān)鍵字,可以看作由多個數(shù)位或多個字符構(gòu)成的多關(guān)鍵字,此時可以采用“分配-收集”的方法進(jìn)行排序,這一過程稱作基數(shù)排序法,其中每個數(shù)字或字符可能的取值個數(shù)稱為基數(shù)。比如,撲克牌的花色基數(shù)為4,面值基數(shù)為13。在整理撲克牌時,既可以先按花色整理,也可以先按面值整理。按花色整理時,先按紅、黑、方、花的順序分成4摞(分配),再按此順序再疊放在一起(收集),然后按面值的順序分成13摞(分配),再按此順序疊放在一起(收集),如此進(jìn)行二次分配和收集即可將撲克牌排列有序。? ?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的数据结构——排序:插入排序、选择排序、交换排序、归并排序、基数排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构——查找:折半查找、二叉查找(排
- 下一篇: 找工作面试经历——校招、秋招、图像算法、