程序員進行編程的過程中肯定少不了對于數據的處理,那么此時了解Java算法就非常重要,Java算法有很多,今天千鋒小編針對Java中常用的算法做了一期整理,下面就簡單的介紹一下程序員常用的一些Java算法。
一、排序
1.1 排序概述
排序(sorting)的功能是將一個數據元素的任意序列,重新排列成一個按關鍵字有序的序列。
內部排序和外部排序:一類是整個排序過程在內存儲器中進行,稱為內部排序;另一類是由于待排序元素數量太大,使得內存儲器無法容納全部數據,排序需要借助外部存儲設備才能完成,這類排序稱為外部排序。
比較排序和非比較排序
大部分排序都是需要通過比較首先來判斷大小,作為排序的依據的。
但是也有例外,比如計數排序、基數排序不需要進行比較。效率可以更高,但同時也會有一些限制條件,也可能需要更多的空間。
冒泡排序、選擇排序、直接插入排序是最基本的三種排序,效率低但是算法簡單。排序的學習一般從這三種排序算法著手。
1.2冒泡排序
冒泡排序的算法
1) 整個數列分成兩部分:前面是無序數列,后面是有序數列
2) 初始狀態下,整個數列都是無序的,有序數列是空
3) 如果一個數列有n個元素,則至多需要n-1趟循環才能保證數列有序
4) 每一趟循環可以讓無序數列中最大數排到最后,(也就是說有序數列的元素個數增加1)
5) 每一趟循環都從數列的第一個元素開始進行比較,依次比較相鄰的兩個元素,比較到無序數列的末尾即可(而不是數列的末尾)
6) 如果前一個大于后一個,交換
1.3 選擇排序
選擇排序的算法
1) 整個數列分成兩部分:前面是有序數列,后面是無序數列
2) 初始狀態下,整個數列都是無序的,有序數列是空
3) 一共n個數,需要n-1趟循環(一趟都不能少)
4) 每比較完一趟,有序數列數量+1,無序數列數量-1
5) 每趟先假設無序數列的第1個元素(整個數列的第i個元素)是最小的,讓當前最小數,從第i+1個元素開始比較,一直比較到最后一個元素。如果發現更小的數,就假設當前數是最小數。
6) 一趟比較完后,將發現最小數和無序數列的第一個數交換(如果最小數不是無序數列的第一個數)
二、遞歸和折半查找
2.1 遞歸
遞歸(recursion)是一種常見的解決問題的方法,即把問題逐漸簡單化。遞歸的基本思想就是“自己調用自己”,一個使用遞歸技術的方法將會直接或者間接的調用自己。利用遞歸可以用簡單的程序來解決一些復雜的問題。比如:斐波那契數列的計算、漢諾塔、快速排序等問題。
遞歸問題的特點:一個問題可被分解為若干層簡單的子問題;子問題和其上層問題的解決方案一致;外層問題的解決依賴于子問題的解決。
與此同時,遞歸有著思路自然、程序簡單的優點,自然也有缺點,遞歸調用會占用大量的系統堆棧,內存耗用多,在遞歸調用層次多時速度要比循環慢的多。
2.2 折半查找
折半查找又稱為二分查找,這種查找方法需要待查的查找表滿足兩個條件:
首先,查找表必須使用順序存儲結構;
其次,查找表必須按關鍵字大小有序排列。
上面就是java中常用的算法的一個簡單的介紹和總結。希望這篇對Java語言經典算法的介紹能夠幫助大家。如果你對Java培訓有興趣,歡迎隨時咨詢千鋒教育!