1.插入排序算法
插入排序的基本思想是在遍歷數組的過程中,假設在序號 i 之前的元素即 [0..i-1] 都已經排好序,本趟需要找到 i 對應的元素 x 的正確位置 k ,并且在尋找這個位置 k 的過程中逐個將比較過的元素往后移一位,為元素 x “騰位置”,最后將 k 對應的元素值賦為 x ,一般情況下,插入排序的時間復雜度和空間復雜度分別為 O(n2 ) 和 O(1)。
2.選擇排序算法
選擇排序的基本思想是遍歷數組的過程中,以 i 代表當前需要排序的序號,則需要在剩余的 [i…n-1] 中找出其中的最小值,然后將找到的最小值與 i 指向的值進行交換。因為每一趟確定元素的過程中都會有一個選擇最大值的子流程,所以人們形象地稱之為選擇排序。選擇排序的時間復雜度和空間復雜度分別為 O(n2 ) 和 O(1) 。
3.冒泡排序算法
冒泡排序是將比較大的數字沉在最下面,較小的浮在上面
4.快速排序算法
通過一趟排序將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可以分別對這兩部分記錄繼續進行排序,已達到整個序列有序的目的,本質就是,找一個基位(樞軸,分水嶺,作用是左邊的都比它小,右邊的都比它大。
可隨機,取名base,首先從序列最右邊開始找比base小的,如果小,換位置,從而base移到剛才右邊(比較時比base小)的位置(記為臨時的high位),這樣base右邊的都比base大。然后,從序列的最左邊開始找比base大的,如果大,換位置,從而base移動到剛才左邊(比較時比base大)的位置(記為臨時的low位),這樣base左邊的都比base小,循環以上兩步,直到 low == heigh, 這使才真正的找到了樞軸,分水嶺. 返回這個位置,分水嶺左邊和右邊的序列,分別再來遞歸。
5.合并排序算法
歸并排序采用的是遞歸來實現,屬于“分而治之”,將目標數組從中間一分為二,之后分別對這兩個數組進行排序,排序完畢之后再將排好序的兩個數組“歸并”到一起,歸并排序最重要的也就是這個“歸并”的過程,歸并的過程中需要額外的跟需要歸并的兩個數組長度一致的空間
6.希爾排序算法
希爾排序的誕生是由于插入排序在處理大規模數組的時候會遇到需要移動太多元素的問題。希爾排序的思想是將一個大的數組“分而治之”,劃分為若干個小的數組。
以 gap 來劃分,比如數組 [1, 2, 3, 4, 5, 6, 7, 8] ,如果以 gap = 2 來劃分,可以分為 [1, 3, 5, 7] 和 [2, 4, 6, 8] 兩個數組(對應的,如 gap = 3 , 則劃分的數組為: [1, 4, 7] 、 [2, 5, 8] 、 [3, 6] )然后分別對劃分出來的數組進行插入排序,待各個子數組排序完畢之后再減小 gap 值重復進行之前的步驟,直至 gap = 1 ,即對整個數組進行插入排序。
此時的數組已經基本上快排好序了,所以需要移動的元素會很小很小,解決了插入排序在處理大規模數組時較多移動次數的問題,希爾排序是插入排序的改進版,在數據量大的時候對效率的提升幫助很大,數據量小的時候建議直接使用插入排序就好了。
7.堆排序算法
本質就是先構造一個大頂堆,parent比children大,root節點就是最大的節點 把最大的節點(root)與尾節點(最后一個節點,比較小)位置互換,剩下最后的尾節點,現在最大,其余的,從第一個元素開始到尾節點前一位,構造大頂堆遞歸。
最新的TIOBE指數顯示,Java編程已經超過了20%的普及門檻,這意味著每五行源代碼當中就有一行采用Java編寫。這不是Java語言有史以來最高分,它曾在多年前和C與C++語言競爭當中失去了頭把交椅,但現在可能已經卷土重來。
學習Java的同學注意了?。?!
學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群346942462,我們一起學Java!