Java算法知識點合集,這方面弱的朋友這篇文章值得看(附學習資料)

 

前言:

在面試中,算法題目是必須的,往往可能還是壓軸題,通過算法能夠看出一個程序員的編程思維,考察對複雜問題的設計與分析能力,對問題的嚴謹性都能夠體現出來。一個算法的好壞,直接影響一個方法調用的性能,進而影響軟件的整體性能。算法是學習所有編程語言的基礎,在Java的學習過程中首先也會選擇以算法起步

 

 

1.二分查找

又叫折半查找,要求待查找的序列有序。每次取中間位置的值與待查關鍵字比較,如果中間位置的值比待查關鍵字大,則在前半部分循環這個查找的過程,如果中間位置的值比待查關鍵字小,則在後半部分循環這個查找的過程。直到查找到了爲止,否則序列中沒有待查的關鍵字。

 

 

2.冒泡排序算法

(1)比較前後相鄰的二個數據,如果前面數據大於後面的數據,就將這二個數據交換。

(2)這樣對數組的第 0 個數據到 N-1 個數據進行一次遍歷後,最大的一個數據就“沉”到數組第N-1 個位置。

(3)N=N-1,如果 N 不爲 0 就重複前面二步,否則排序完成。

 

 

 

 

3.插入排序算法

通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應的位置並插入。插入排序非常類似於整撲克牌。在開始摸牌時,左手是空的,牌面朝下放在桌上。接着,一次從桌上摸起一張牌,並將它插入到左手一把牌中的正確位置上。爲了找到這張牌的正確位置,要將它與手中已有的牌從右到左地進行比較。無論什麼時候,左手中的牌都是排好序的。如果輸入數組已經是排好序的話,插入排序出現最佳情況,其運行時間是輸入規模的一個線性函數。如果輸入數組是逆序排列的,將出現最壞情況。平均情況與最壞情況一樣,其時間代價是(n2)。

 

 

 

 

 

 

4.快速排序算法

快速排序的原理:選擇一個關鍵值作爲基準值。比基準值小的都在左邊序列(一般是無序的),比基準值大的都在右邊(一般是無序的)。一般選擇序列的第一個元素。

一次循環:從後往前比較,用基準值和最後一個值比較,如果比基準值小的交換位置,如果沒有繼續比較下一個,直到找到第一個比基準值小的值才交換。找到這個值之後,又從前往後開始比較,如果有比基準值大的,交換位置,如果沒有繼續比較下一個,直到找到第一個比基準值大的值才交換。直到從前往後的比較索引>從後往前比較的索引,結束第一次循環,此時,對於基準值來說,左右兩邊就是有序的了

 

 

 

 

 

 

5.希爾排序算法

基本思想:先將整個待排序的記錄序列分割成爲若干子序列分別進行直接插入排序,待整個序列中的記錄“基本有序”時,再對全體記錄進行依次直接插入排序。

1. 操作方法:

選擇一個增量序列 t1,t2,…,tk,其中 ti>tj,tk=1;

2. 按增量序列個數 k,對序列進行 k 趟排序;

3. 每趟排序,根據對應的增量 ti,將待排序列分割成若干長度爲 m 的子序列,分別對各子表進行直接插入排序。僅增量因子爲1 時,整個序列作爲一個表來處理,表長度即爲整個序列的長度

 

 

 

 

6.歸併排序算法

歸併(Merge)排序法是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分爲若干個子序列,每個子序列是有序的。然後再把有序子序列合併爲整體有序序列.

 

 

 

 

 

 

 

 

7.桶排序算法

桶排序的基本思想是: 把數組 arr 劃分爲 n 個大小相同子區間(桶),每個子區間各自排序,最後合併 。計數排序是桶排序的一種特殊情況,可以把計數排序當成每個桶裏只有一個元素的情況。

1.找出待排序數組中的最大值 max、最小值 min

2.我們使用 動態數組 ArrayList 作爲桶,桶裏放的元素也用 ArrayList 存儲。桶的數量爲(maxmin)/arr.length+1

3.遍歷數組 arr,計算每個元素 arr[i] 放的桶

4.每個桶各自排序

 

 

 

 

8.基數排序算法

將所有待比較數值(正整數)統一爲同樣的數位長度,數位較短的數前面補零。然後,從最低位開始,依次進行一次排序。這樣從最低位排序一直到最高位排序完成以後,數列就變成一個有序序列。

 

 

 

 

9.剪枝算法

在搜索算法中優化中,剪枝,就是通過某種判斷,避免一些不必要的遍歷過程,形象的說,就是剪去了搜索樹中的某些“枝條”,故稱剪枝。應用剪枝優化的核心問題是設計剪枝判斷方法,即確定哪些枝條應當捨棄,哪些枝條應當保留的方法.

 

 

10.回溯算法

回溯算法實際上一個類似枚舉的搜索嘗試過程,主要是在搜索嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就“回溯”返回,嘗試別的路徑。

總結:

由於篇幅限制,還有一些算法我就不一一分享了,文章整理的這些是整理的一份Java核心知識點的一個小小的部分,要在面試中脫穎而出,算法題可以對答如流是不太可以的,所以一定要雨露均沾啊,這份Java知識點包含了很多東西,需要的朋友自取,自取,自取,關注我的供種號 Java周某人 即可

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章