八大排序算法,分別是插入排序,冒泡排序,選擇排序,希爾排序,快速排序,堆排序,歸併排序,基數排序,搞了數年也沒有靜下心來,思考一下這些基本的算話,用到時,面試時,考試時,細細的看百度出的博客,即是耐下心看了一兩個,但是,還是一頭霧水!WHY?
細想一下,這些算法,不就是我們實際生活中,常常面對各種排序場景問題,而要採取的方法手段?
插入排序比如鬥地主抽牌,在未排序的隊列中隨便抽一張「關鍵牌」,放到合適的位置就好。
冒泡排序兩兩比較待排序的關鍵牌,每次直到找到一個極端(極大或者極小),讓其冒泡。
插入排序,冒泡排序要說時間複雜度,最好的運氣的話是O(n),最差最差也就是O(n^2),但是比較穩定,佔用空間O(1)。
選擇排序每次從待排序的牌中選出最小的牌,放到已排序區,專軟柿子捏啊!
這個算法有些最簡單,但是時間複雜度,最好的運氣的話是O(n^2),最差最差也就是O(n^2),而且比較不穩定,佔用空間O(1)。
希爾排序是插入排序基礎上,在一個list中,每次遞減劃分步長,選擇組的隊員進行比較,索引位置不變,value值交換大小,數據朝著局部有序的方向發展。
這個算法有些複雜,時間複雜度最好的運氣的話是O(n^1/3),平均是O(n^1.3),最差最差也就是O(n^2),但是比較不穩定,佔用空間O(1)。
快速排序採用了分治法,選擇一個基準牌,每次都把數據分為左小右大的兩部分,再遞歸排序。
這個算法有些複雜,時間複雜度最好的運氣的話是O(nlogn),最差最差也就是O(n^2),但是比較不穩定,佔用空間O(logn)。
堆排序要麼父節點都大於左右孩子,或者都小於左右孩子。
這個算法相對簡單,時間複雜度無論好壞都是O(nlogn),佔用空間O(1),但是比較不穩定。
歸併排序相鄰的遞增結合比較大小,謂之歸併。
這個算法相對簡單,時間複雜度無論好壞都是O(nlogn),而且比較穩定,但是佔用空間O(n)。
基數排序針對排序的對象不只是數值,取餘,0到9的桶,還可以是字母等,本質也是對排序的對象的特點分治歸類。
這個算法相對簡單,時間複雜度最好的運氣的話是O(n),最差最差也就是O(d(n+r)),佔用空間O(logn),比較穩定。
大家都知道韓信點兵,多多益善。為什麼呢?估計韓信的排序算法學的好,無論多大的數據壓力,都在他的排序算法下,以最小的代價,搞定,屢屢取勝。無論是社會的工作者,還是學生,現在社會信息爆炸的今天,都要面臨很多信息的優先性,及重要性的排序選擇,算法來源於生活,是生活方式的抽象,可以幫助我們提高生活工作學習的效率,和生活品質!那您從這些排序算法中,映射生活方式,悟出多少生活技巧呢?
多選|面對生活中的很多排序選擇,您會選擇那種排序算法,去處理呢?