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