數據結構中幾種經典排序簡介

參考:

https://jingyan.baidu.com/article/fd8044fa79a7265031137aad.html

https://www.cnblogs.com/hokky/p/8529042.html

八大排序:

插入排序類:

1,直接插入排序:

給定的一組記錄,將其分爲兩個序列組,一個爲有序序列(按照順序從小到大或者從大到小),一個爲無序序列。

初始時,將記錄中的第一個數當成有序序列, 剩下其他所有數都當做是無序序列組中的數據。

然後將無序序列組中的數據插入到有序序列的適當位置。

2,希爾排序:

是插入排序的操作,但是希爾排序並不是把一組記錄看成一個整體,而將整個記錄分爲了若干組記錄,然後在對每組記錄進行插入排序。

選擇排序類:

1,簡單選擇排序:

先將第一個位值上的數跟之後所有位置上的數依次進行比較,如果第一個位置上的數比第二個位置上的數大,則進行互換,然後繼續將第一個位置上的數與第三個位置上的數進行比較,經過一輪的比較後,第一個位值上的數就是所有數中最小的一個,如此往復。

2,堆排序:

分爲大頂堆和小頂堆,大頂堆要求節點的元素都要大於其孩子,小頂堆要求節點元素都小於其左右孩子,兩者對左右孩子的大小關係不做任何要求。

大堆排序:取出堆的根節點,放在待排序序列最後一位,重複此過程。直至堆中只有1個元素爲止。小堆排序反之!

交換排序類:

1,冒泡排序:

  1. 將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素;
    ( 第一輪結束後,序列最後一個元素一定是當前序列的最大值;)
  2. 對序列當中剩下的n-1個元素再次執行步驟1。
  3. 對於長度爲n的序列,一共需要執行n-1輪比較
    (利用while循環可以減少執行次數)

2,快速排序:

  1. 從序列當中選擇一個基準數(pivot)
    在這裏我們選擇序列當中第一個數作爲基準數
  2. 將序列當中的所有數依次遍歷,比基準數大的位於其右側,比基準數小的位於其左側
  3. 重複步驟1.2,直到所有子集當中只有一個元素爲止。

 

歸併排序:

參考:https://www.cnblogs.com/chengxiao/p/6194356.html

歸併排序(MERGE-SORT)是利用歸併的思想實現的排序方法,該算法採用經典的分治(divide-and-conquer)策略(分治法將問題(divide)成一些小的問題然後遞歸求解,而治(conquer)的階段則將分的階段得到的各答案"修補"在一起,即分而治之)。

分開進行排序,然後再將結果合併到一起!

 

基數排序:

基數排序:通過序列中各個元素的值,對排序的N個元素進行若干趟的“分配”與“收集”來實現排序。
分配:我們將L[i]中的元素取出,首先確定其個位上的數字,根據該數字分配到與之序號相同的桶中
收集:當序列中所有的元素都分配到對應的桶中,再按照順序依次將桶中的元素收集形成新的一個待排序列L[ ]
對新形成的序列L[]重複執行分配和收集元素中的十位、百位...直到分配完該序列中的最高位,則排序結束

龍哥,給我講了287 ,386的例子。

第一次是386,6比7小放在第一個桶裏。第二次是十位,分配還會按照之前排序進行。第三次就是百位。

百位比較完之後,沒有更高位了。排序結束。

OK

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章