算法基礎知識

以下是高德納在他的著作《計算機程序設計藝術》里對算法的特征歸納:
輸入:一個算法必須有零個或以上輸入量厕氨。
輸出:一個算法應有一個或以上輸出量,輸出量是算法計算的結果介评。
明確性:算法的描述必須無歧義朋贬,以保證算法的實際執(zhí)行結果是精確地匹配要求或期望铣揉,通常要求實際運行結果是確定的。
有限性:依據(jù)圖靈的定義蛾魄,一個算法是能夠被任何圖靈完備系統(tǒng)模擬的一串運算虑瀑,而圖靈機只有有限個狀態(tài)、有限個輸入符號和有限個轉(zhuǎn)移函數(shù)(指令)滴须。而一些定義更規(guī)定算法必須在有限個步驟內(nèi)完成任務舌狗。
有效性:又稱可行性。能夠?qū)崿F(xiàn)扔水,算法中描述的操作都是可以通過已經(jīng)實現(xiàn)的基本運算執(zhí)行有限次來實現(xiàn)痛侍。

1.什么是排序算法(Sorting algorithm)

一種能將一串數(shù)據(jù)依照特定排序方式進行排列的一種算法。
常用的排序方式是數(shù)值順序和字典排序魔市。
排序算法的輸出必須遵守下列兩個原則:
1.輸出結果為遞增序列恋日。(遞增是針對所需的排序順序而言)
2.輸出結果是原輸入的一種排列膀篮、或是重組。

2.常見排序算法 - 冒泡排序:體育委員兩兩摸頭法 (Bubble Sort)

冒泡排序是一種簡單的排序算法岂膳。它重復地走訪過要排序的數(shù)列誓竿,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來谈截。走訪數(shù)列的工作是重復地進行直到?jīng)]有再需要交換筷屡,也就是說該數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端簸喂。
冒泡排序算法的流程如下:
1.比較相鄰的元素毙死。如果第一個比第二個大,就交換他們兩個喻鳄。
2.對每一對相鄰元素作同樣的工作扼倘,從開始第一對到結尾的最后一對。在這一點除呵,最后的元素應該會是最大的數(shù)再菊。
3.針對所有的元素重復以上的步驟,除了最后一個颜曾。
4.持續(xù)每次對越來越少的元素重復上面的步驟纠拔,直到?jīng)]有任何一對數(shù)字需要比較。

3.插入排序 :起撲克牌法(Insertion Sort)

設有一組關鍵字{K1泛豪, K2稠诲,…, Kn}诡曙;排序開始就認為 K1 是一個有序序列臀叙;讓 K2 插入上述表長為 1 的有序序列,使之成為一個表長為 2 的有序序列价卤;然后讓 K3 插入上述表長為 2 的有序序列劝萤,使之成為一個表長為 3 的有序序列;依次類推荠雕,最后讓 Kn 插入上述表長為 n-1 的有序序列稳其,得一個表長為 n 的有序序列。
具體算法描述如下:
1.從第一個元素開始炸卑,該元素可以認為已經(jīng)被排序
2.取出下一個元素既鞠,在已經(jīng)排序的元素序列中從后向前掃描
3.如果該元素(已排序)大于新元素,將該元素移到下一位置
4.重復步驟 3盖文,直到找到已排序的元素小于或者等于新元素的位置
5.將新元素插入到該位置后
6.重復步驟 2~5
如果比較操作的代價比交換操作大的話嘱蛋,可以采用二分查找法來減少比較操作的數(shù)目。該算法可以認為是插入排序的一個變種,稱為二分查找排序洒敏。
二分查找法龄恋,是一種在有序數(shù)組中查找某一特定元素的搜索算法。搜素過程從數(shù)組的中間元素開始凶伙,如果中間元素正好是要查找的元素郭毕,則搜素過程結束;如果某一特定元素大于或者小于中間元素函荣,則在數(shù)組大于或小于中間元素的那一半中查找显押,而且跟開始一樣從中間元素開始比較。如果在某一步驟數(shù)組為空傻挂,則代表找不到乘碑。這種搜索算法每一次比較都使搜索范圍縮小一半。

4.桶排序:強迫癥收撲克牌法 (Bucket Sort)

也叫箱排序金拒,原理是將數(shù)組分到有限數(shù)量的桶子里兽肤,然后對每個桶子再分別排序(有可能再使用別的排序算法或是以遞歸方式繼續(xù)使用桶排序進行排序),最后將各個桶中的數(shù)據(jù)有序的合并起來绪抛。
排序過程:
1.假設待排序的一組數(shù)統(tǒng)一的分布在一個范圍中资铡,并將這一范圍劃分成幾個子范圍,也就是桶
2.將待排序的一組數(shù)睦疫,分檔規(guī)入這些子桶害驹,并將桶中的數(shù)據(jù)進行排序
3.將各個桶中的數(shù)據(jù)有序的合并起來
Data Structure Visualizations 提供了一個桶排序的分步動畫演示
桶可多可少鞭呕,要么要速度要么要內(nèi)存

5.選擇排序:體育老師一指禪法(Selection sort)

選擇排序(Selection Sort)是一種簡單直觀的排序算法蛤育。它的工作原理如下,首先在未排序序列中找到最泻伞(大)元素瓦糕,存放到排序序列的起始位置,然后腋么,再從剩余未排序元素中繼續(xù)尋找最泄韭Α(大)元素,然后放到已排序序列的末尾珊擂。以此類推圣勒,直到所有元素均排序完畢。
選擇排序的主要優(yōu)點與數(shù)據(jù)移動有關摧扇。如果某個元素位于正確的最終位置上圣贸,則它不會被移動。選擇排序每次交換一對元素扛稽,它們當中至少有一個將被移到其最終位置上吁峻,因此對n個元素的序列進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序?qū)儆诜浅:玫囊环N用含。
圖像演示

image.png

6.計數(shù)排序

無法統(tǒng)計負數(shù)和小數(shù)矮慕,但是他比快排還要快,需要一個hash啄骇,計數(shù)排序?qū)τ跀?shù)據(jù)范圍很大的數(shù)組痴鳄,需要大量時間和內(nèi)存,適用性不高缸夹。

7.基數(shù)排序

固定10個桶夏跷,從0~9,依次從個位進行排序明未,之后百位槽华,以此類推,排的次數(shù)與最大數(shù)的位數(shù)相同趟妥。

體育委員兩兩摸頭法(冒泡排序)
體育老師一指禪法(選擇排序)
起撲克牌法(插入排序)
強迫癥收撲克牌法(基數(shù)排序)
快排
歸并排序
堆排序

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末猫态,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子披摄,更是在濱河造成了極大的恐慌亲雪,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疚膊,死亡現(xiàn)場離奇詭異义辕,居然都是意外死亡,警方通過查閱死者的電腦和手機寓盗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門灌砖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人傀蚌,你說我怎么就攤上這事基显。” “怎么了善炫?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵撩幽,是天一觀的道長。 經(jīng)常有香客問我箩艺,道長窜醉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任艺谆,我火速辦了婚禮榨惰,結果婚禮上,老公的妹妹穿的比我還像新娘擂涛。我一直安慰自己读串,他們只是感情好聊记,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恢暖,像睡著了一般排监。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杰捂,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天舆床,我揣著相機與錄音,去河邊找鬼嫁佳。 笑死挨队,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蒿往。 我是一名探鬼主播盛垦,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瓤漏!你這毒婦竟也來了腾夯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤蔬充,失蹤者是張志新(化名)和其女友劉穎蝶俱,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饥漫,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡榨呆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了庸队。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片积蜻。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖皿哨,靈堂內(nèi)的尸體忽然破棺而出浅侨,到底是詐尸還是另有隱情纽谒,我是刑警寧澤证膨,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站鼓黔,受9級特大地震影響央勒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜澳化,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一崔步、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缎谷,春花似錦井濒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酪惭。三九已至,卻和暖如春者甲,著一層夾襖步出監(jiān)牢的瞬間春感,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工虏缸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鲫懒,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓刽辙,卻偏偏與公主長得像窥岩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宰缤,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 概述 排序有內(nèi)部排序和外部排序谦秧,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大撵溃,一次不能容納全部...
    蟻前閱讀 5,167評論 0 52
  • 概述:排序有內(nèi)部排序和外部排序疚鲤,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大缘挑,一次不能容納全部...
    每天刷兩次牙閱讀 3,727評論 0 15
  • 概述 排序有內(nèi)部排序和外部排序集歇,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大语淘,一次不能容納全部...
    閑云清煙閱讀 756評論 0 6
  • 數(shù)據(jù) 元素又稱為元素诲宇、結點、記錄是數(shù)據(jù)的基本單位 數(shù)據(jù)項是具有獨立含義的最小標識單位 數(shù)據(jù)的邏輯結構 數(shù)據(jù)的邏輯結...
    PPPeg閱讀 13,703評論 0 15
  • 在生死臨界點的時候,你會發(fā)現(xiàn)吕粗,任何加班纺荧,給自己太多壓力,買房買車的需求颅筋,這些都是浮云宙暇。如果有時間,好好陪陪你的孩子...
    艾希生活閱讀 550評論 0 0