1. 程式人生 > >所有排序算法匯總,冒泡,選擇,插入,快速,優化快速,歸並,希爾,堆排序

所有排序算法匯總,冒泡,選擇,插入,快速,優化快速,歸並,希爾,堆排序

合並 左移 詳細 left for循環 兩個 第一個元素 保存 匯總

冒泡排序,不多說,兩次for循環比較相鄰兩個元素的大小,然後進行交換。

選擇排序,我們第一次for循環遍歷所有元素,並把當前元素假設為最小的元素,然後再一個for循環去尋找真正最小的元素進行交換,這樣每次我們都能找到未排序元素中的最小的元素。

插入排序,我們第一個for循環遍歷所有元素,保存當前元素的位置,遍歷該元素前面所有的元素,如果前邊的元素的值比自己大,那麽就進行交換,每次都確保左邊都是比自己小的元素,右邊都是比自己大的元素。

快速排序,選擇第一個元素作為基準值,然後把比他小的元素放他左邊,比他大的元素放他右邊,然後再對他左邊的元素進行同樣的操作,對他右邊的元素進行同樣的操作,即遞歸。

優化快速排序,我們在選擇主元之前提前把比他小的元素放在他左邊,比他大的元素放在他右邊,而不是在之後遞歸的時候做,也就是找一次基準值就行了,那怎麽實現呢?我們在一個亂序數組中,設定一個左指針和一個右指針,然後左指針往右移,右指針往左移,如果左指針指向的元素大於基準值停下來,右指針遇到比基準值小的元素就和左指針交換,直到left大於right交換就結束了,最後交換右指針對應元素與基準值的位置,返回右指針的位置,即可得到基準值的位置,然後進行遞歸排序。

歸並排序,我們把一個打亂的數組分成兩份後再分成兩份,一直分到最後,然後開始進行合並,合並的時候只需要對兩個合並的數組進行判斷,對兩個數組的元素進行比較,一直拿出最小的一個元素,拿出來後指針加一,然後一直合並再合並。

希爾排序,設定一個增量值,該增量值值確定了每次要比較元素之間的索引差,最後一個索引差必須為1。一般增量值設定成數組長度的一半,一半的一半。通過比較數組第0個元素和數組第0+增量值個元素大小後排序,然後第1個…之後比較另一個增量值,知道最後全部排序成功。

堆排序,堆排序在堆那一節詳細說明了,其實就是用堆的特性來完成排序,每次添加都維持堆的特性添加元素,然後在提取的時候,每次提取提取的都是最大值。

所有排序算法匯總,冒泡,選擇,插入,快速,優化快速,歸並,希爾,堆排序