算法是編程的基礎,是面試過程中經常問到的熱點問題之一,尤其是排序算法。但是大部分的網際網路公司只要回答出基本的思路或者原理即可,點到為止,除了華為社招有機試寫代碼,其他公司不多見。下面我們就整理了常見的八大排序算法,供大家參考。
其中的動圖效果特變絢,感覺比代碼實現直觀多了,這裡要說明下動圖是使用的hellozhxy的csdnblog哦^_^。代碼的具體實現大家可以自己去整理下,這裡只說明基本思想,希望能幫助大家更好的理解下。
一、插入排序
1、直接插入排序
直接插入排序是將一個待排序的記錄,插入到前面已經排好序的有序序列中去,如此反覆循環,直到全部排好順序為止。
2、希爾排序
在要排序的一組數中,根據某一增量分為若干子序列,並對子序列分別進行插入排序。然後逐漸將增量減小,並重複上述過程。直至增量為1,此時數據序列基本有序,最後進行插入排序。
二、交換排序
1、冒泡排序
冒泡排序是對相鄰的元素進行兩兩比較,較大的數下沉,較小的數上浮,最終達到有序。
2、快速排序
先從數列中取出一個數作為key值;將比這個數小的數全部放在它的左邊,大於或等於它的數全部放在它的右邊;對左右兩個小數列重複第二步,直至各區間只有1個數。
三、選擇排序
1、簡單選擇排序
簡單選擇排序是每一趟從待排序的數據元素中選擇最小(或最大)的一個元素作為首元素,直到所有元素排完為止,屬於不穩定排序。
2、堆排序
堆排序(Heapsort)是利用堆這種數據結構所設計的一種排序算法。堆積是一個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。
四、歸併排序
歸併排序是建立在歸併操作上的一種有效的排序算法,採用分治法。首先考慮下如何將2個有序數列合併。這個非常簡單,只要從比較2個數列的第一個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然後再進行比較,如果有數列為空,那直接將另一個數列的數據依次取出即可。
五、基數排序
基數排序又叫「桶子法」,是桶排序的擴展,是將整數按位數切割成不同的數字,然後按每個位數分別比較。首先創建數組A[MaxValue];然後將每個數放到相應的位置上(如8放在下標8的數組位置);最後遍歷數組,即為排序後的結果。