互聯(lián)網(wǎng)行業(yè)從業(yè)者在面試的過程中經(jīng)常會碰到這樣一個問題,尤以測試人員和開發(fā)人員碰到的幾率最高:請說一說你熟悉的幾種排序算法拒垃。
這個問題或許不是作為唯一考核你專業(yè)技能的一個問題僵朗,但是如果你能答得上來滋将,面試官肯定會給你打一個比較高的印象分,因為算法直接考察了一個人的思維和邏輯佩脊,分析數(shù)據(jù)蛙粘,解決問題的能力。這也是當下很多高新企業(yè)越來越注重和強調(diào)的人才素質(zhì)威彰。
可惜的是很多人在這道題上的表現(xiàn)都很差強人意出牧,要么就是完全答不上來,要么就是聽過歇盼,但是解釋起來卻很混亂舔痕,這都是源于平時很少了解算法或者對于算法一知半解導致的。
好吧豹缀,在介紹冒泡算法之前伯复,肯定還有很多小白連算法的概念都不知道,所以還是先來做一下掃盲吧邢笙。算法(Algorithm)是指解題方案的準確而完整的描述啸如,是一系列解決問題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問題的策略機制氮惯。這個是百度百科的解釋叮雳,其實說的更簡單點想暗,算法就是計算的方法。
回到上面的問題帘不,請列舉你熟悉的幾種排序算法说莫。
這里小編就給大家介紹常見的幾種排序算法:冒泡排序,快速排序寞焙,插入排序储狭,選擇排序,希爾排序等等棺弊,通常晶密,說出兩三個你比較熟悉的排序就基本上能搞定面試官了擒悬。
咱們這里不會針對每種排序算法去做分析和講解模她,咱們來重點談?wù)劷?jīng)典排序算法------冒泡排序,說一說它到底是怎么去排的懂牧。
首先來了解冒泡這個概念侈净,咱們應(yīng)該都見過水中的氣泡,越往上冒僧凤,氣泡就越大畜侦,所以就用這個生活中常見的現(xiàn)象來描述冒泡排序,把大的數(shù)字往上面一直冒躯保,直到所有的數(shù)據(jù)都是按照從小到大的順序來排列就是冒泡排序的思想旋膳。
假設(shè)咱們有幾個雜亂無序的數(shù)字:4,3途事,6验懊,2,1尸变,5义图,那么要通過冒泡排序來將這幾個數(shù)字按照從小到大的順序來排序,要怎么做呢召烂?
思路:拿第一個數(shù)字跟其他所有數(shù)字進行比較碱工,若比它大則交換位置,直到將這些數(shù)字中最大的數(shù)字冒到最上面奏夫,接著再繼續(xù)第2輪怕篷,第3輪,第4輪酗昼,第5輪匙头,直到所有大的數(shù)組都冒到了上面,這樣所有的數(shù)據(jù)就會按照從小到大來進行排序仔雷。
上面是小編畫的原理圖蹂析,如果你還是看不懂舔示,那我們就只能上咱們的終極武器了,下面是小編在網(wǎng)上找到的冒泡懵逼排序圖电抚,希望能夠幫助你們?nèi)ダ斫膺@個算法的原理
上面是排序的算法惕稻,如果要用代碼來實現(xiàn),該如何寫呢蝙叛?下面小編就用java代碼來實現(xiàn)上面這個冒泡排序:
那我們再來分析一下這個算法的復雜度俺祠。
我們來看一下整個冒泡過程中數(shù)值之間總共比較了多少次。
假設(shè)要參與排序的數(shù)有n個借帘,則第一輪冒泡第一個數(shù)要跟其他n-1個數(shù)都進行比較蜘渣,所以要進行n-1次比較,最大的數(shù)被冒到了最上面肺然。
所以第二輪冒泡就相當于前面n-1個數(shù)進行冒泡蔫缸,所以第二輪要進行n-2次比較,以此類推际起,第三輪比較次數(shù)為n-3,最后兩個數(shù)冒泡的時候只要比較1次拾碌。
所以比較次數(shù)其實是一個從1到n-1的等差數(shù)列的和,所以總共比較次數(shù)按照等差數(shù)列求和就是:[1+(n-1)]*(n-1)/2街望,所以最后得到的次數(shù)就是n*(n-1)/2次校翔。
這里小編就冒泡排序做了一下簡單的介紹,包括冒泡的原理灾前,以及代碼實現(xiàn)防症。至于其他排序算法,感興趣的同學可以自行百度去了解哎甲。