1.插入排序算法
插入排序的基本思想是在遍歷數(shù)組的過程中懂诗,假設(shè)在序號(hào) i 之前的元素即 [0..i-1] 都已經(jīng)排好序敷硅,本趟需要找到 i 對(duì)應(yīng)的元素 x 的正確位置 k ,并且在尋找這個(gè)位置 k 的過程中逐個(gè)將比較過的元素往后移一位,為元素 x “騰位置”好渠,最后將 k 對(duì)應(yīng)的元素值賦為 x 弦撩,一般情況下步咪,插入排序的時(shí)間復(fù)雜度和空間復(fù)雜度分別為 O(n2 ) 和 O(1)。
2.選擇排序算法
選擇排序的基本思想是遍歷數(shù)組的過程中益楼,以 i 代表當(dāng)前需要排序的序號(hào)猾漫,則需要在剩余的 [i…n-1] 中找出其中的最小值,然后將找到的最小值與 i 指向的值進(jìn)行交換感凤。因?yàn)槊恳惶舜_定元素的過程中都會(huì)有一個(gè)選擇最大值的子流程悯周,所以人們形象地稱之為選擇排序。選擇排序的時(shí)間復(fù)雜度和空間復(fù)雜度分別為 O(n2 ) 和 O(1) 陪竿。
3.冒泡排序算法
冒泡排序是將比較大的數(shù)字沉在最下面禽翼,較小的浮在上面
4.快速排序算法
通過一趟排序?qū)⒋庞涗浄指畛瑟?dú)立的兩部分,其中一部分記錄的關(guān)鍵字均比另一部分的關(guān)鍵字小,則可以分別對(duì)這兩部分記錄繼續(xù)進(jìn)行排序,已達(dá)到整個(gè)序列有序的目的,本質(zhì)就是,找一個(gè)基位(樞軸,分水嶺,作用是左邊的都比它小,右邊的都比它大族跛。
可隨機(jī),取名base闰挡,首先從序列最右邊開始找比base小的,如果小,換位置,從而base移到剛才右邊(比較時(shí)比base小)的位置(記為臨時(shí)的high位),這樣base右邊的都比base大。然后,從序列的最左邊開始找比base大的礁哄,如果大,換位置,從而base移動(dòng)到剛才左邊(比較時(shí)比base大)的位置(記為臨時(shí)的low位),這樣base左邊的都比base小长酗,循環(huán)以上兩步,直到 low == heigh, 這使才真正的找到了樞軸,分水嶺. 返回這個(gè)位置,分水嶺左邊和右邊的序列,分別再來遞歸。
5.合并排序算法
歸并排序采用的是遞歸來實(shí)現(xiàn)桐绒,屬于“分而治之”夺脾,將目標(biāo)數(shù)組從中間一分為二,之后分別對(duì)這兩個(gè)數(shù)組進(jìn)行排序掏膏,排序完畢之后再將排好序的兩個(gè)數(shù)組“歸并”到一起劳翰,歸并排序最重要的也就是這個(gè)“歸并”的過程,歸并的過程中需要額外的跟需要?dú)w并的兩個(gè)數(shù)組長(zhǎng)度一致的空間
6.希爾排序算法
希爾排序的誕生是由于插入排序在處理大規(guī)模數(shù)組的時(shí)候會(huì)遇到需要移動(dòng)太多元素的問題馒疹。希爾排序的思想是將一個(gè)大的數(shù)組“分而治之”佳簸,劃分為若干個(gè)小的數(shù)組。
以 gap 來劃分颖变,比如數(shù)組 [1, 2, 3, 4, 5, 6, 7, 8] 生均,如果以 gap = 2 來劃分,可以分為 [1, 3, 5, 7] 和 [2, 4, 6, 8] 兩個(gè)數(shù)組(對(duì)應(yīng)的腥刹,如 gap = 3 马胧, 則劃分的數(shù)組為: [1, 4, 7] 、 [2, 5, 8] 衔峰、 [3, 6] )然后分別對(duì)劃分出來的數(shù)組進(jìn)行插入排序佩脊,待各個(gè)子數(shù)組排序完畢之后再減小 gap 值重復(fù)進(jìn)行之前的步驟蛙粘,直至 gap = 1 ,即對(duì)整個(gè)數(shù)組進(jìn)行插入排序威彰。
此時(shí)的數(shù)組已經(jīng)基本上快排好序了出牧,所以需要移動(dòng)的元素會(huì)很小很小,解決了插入排序在處理大規(guī)模數(shù)組時(shí)較多移動(dòng)次數(shù)的問題歇盼,希爾排序是插入排序的改進(jìn)版舔痕,在數(shù)據(jù)量大的時(shí)候?qū)π实奶嵘龓椭艽螅瑪?shù)據(jù)量小的時(shí)候建議直接使用插入排序就好了豹缀。
7.堆排序算法
本質(zhì)就是先構(gòu)造一個(gè)大頂堆,parent比children大,root節(jié)點(diǎn)就是最大的節(jié)點(diǎn) 把最大的節(jié)點(diǎn)(root)與尾節(jié)點(diǎn)(最后一個(gè)節(jié)點(diǎn),比較小)位置互換伯复,剩下最后的尾節(jié)點(diǎn),現(xiàn)在最大,其余的,從第一個(gè)元素開始到尾節(jié)點(diǎn)前一位,構(gòu)造大頂堆遞歸。
最新的TIOBE指數(shù)顯示邢笙,Java編程已經(jīng)超過了20%的普及門檻啸如,這意味著每五行源代碼當(dāng)中就有一行采用Java編寫。這不是Java語言有史以來最高分鸣剪,它曾在多年前和C與C++語言競(jìng)爭(zhēng)當(dāng)中失去了頭把交椅组底,但現(xiàn)在可能已經(jīng)卷土重來。
學(xué)習(xí)Java的同學(xué)注意了?鸷А!江滨!
學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話铛纬,歡迎加入Java學(xué)習(xí)交流群346942462,我們一起學(xué)Java唬滑!