第一講 數組初始化&操做java
一、 數組定義算法
概念:數組是同一種類型數據的集合,其實數組就是一個容器。數組中的元素從0開始編號,這樣方便了對這些元素進行操做(獲取、修改改、排序等)。數組
數組的定義格式有:blog
Int[] arr = new int[10]; ——這裏指定數組的長度,後續須要分別對每個元素賦值;排序
Int[] arr = new int[]{2,1,5,9};——建立數組實體並初始化,不須要指定長度;索引
Int[] arr = {2,1,5,9};——定義數組並初始化;內存
二、 數組操做效率
1) 獲取數組中的元素,一般須要遍歷數組容器
Int[] arr = {2,1,5,9};變量
For(int x = 0;x<arr.length;x++) //length是數組中表示數組元素個數的屬性。
{
System.out.print(arr[x]);//遍歷數組arr,打印數組中全部元素。
}
2) 獲取最值
獲取最大值思路:一、獲取最值須要比較,每一次比較都會有一個較大的值,能夠將該較大值存在一個臨時變量中。二、讓數組中的每個元素和這個變量中的值進行比較,若是大於了變量中的值,就將該元素值賦給該變量。三、當全部的元素都比較完成,那麼該變量中的值就是數組中的最大值。
步驟:一、定義變量,初始化爲數組中任意一個元素;二、經過循環語句對數組進行遍歷;三、在遍歷過程當中定義判斷條件,若是遍歷到的元素比變量中的值大,就將元素賦值給變量。
獲取最小值思路:與獲取最大值類似,只是在遍歷數組進行比較時,變量中存儲的是較小值。
獲取最大最小值代碼實現以下:
第二講 數組排序
一、 選擇排序法
內循環一次,最值出如今頭角標位置上
思路:拿數組第一個元素與後面的元素遍歷比較,將若大於(小於)第一個則二者值互換,第一個元素與其餘元素比較完後,拿第二個元素與後面的元素進行遍歷比較,依次類推,直到遍歷完成,數組排序完成。
實現代碼以下:
二、 冒泡排序法
內循環一次,最值出如今最後角標位置上。
思路:相鄰兩個元素進行比較,若是符合條件(大於或小於)進行值互換;
代碼實現以下:
三、 希爾排序
希爾算法是最快的排序算法。
選擇/冒泡排序法效率低的緣由是:比較完成後須要在堆內存中進行元素對換。解決方案:將須要換位的元素腳標存放在內存中,最後一次互換就直接數組元素互換。
四、 Java中有自帶的排序方法:Arrays.sort(arr);
第三講 數組查找操做
一、 獲取關鍵值在數組中第一次出現的位置
思路:遍歷數組,並與該值進行比較,若是相等則返回角標位置。
代碼實現以下:
二、 折半查找算法
折半查找能夠減小遍歷的次數,從而提升查找的效率,但要求該數組必須是有序的。
思路:用關鍵值與數據中間元素進行比較,而後根據比較結果判斷關鍵值在前半部分仍是後半部分,而後再折半查找那一部分,依次類推。
代碼實現以下:
三、 練習
將一個元素插入到一個有序數組中,保證該數組還是有序的。若是獲取該元素應該插入數組的哪一個位置。
思路:
折半算法在數組中查找該元素,返回最小下角標,該下角標就是元素插入數組的位置。
第四講 進制轉換
一、 十進制轉成二進制
二、 十進制轉成十六進制
三、 查表法將十進制轉成十六進制
思路:先將十六進制的元素(0~F)臨時存儲在一個表中,每一次&15後的值做爲索引區查找創建好的表,就能夠找到對應的元素。。
代碼實現以下:
四、 查表法將十進制轉成二進制
知識點總結
一、 數組有多種定義和初始化方式
1) 若不知道數組具體值,但直到數據長度,能夠定義數據並指定長度:int [] arr = new int[10],後續只能遍歷將元素賦值給數組中的單獨位置;
2) 若不知道數組長度,但直到數組中的值,能夠用這種方式定義並初始化:int [] arr = new int[]{1,2,3}
二、 數組排序
都須要利用嵌套循環。
1)選擇排序法,內循環一次,最值出如今頭角標位置上;
2)冒泡排序法,內循環一次,最值出如今最後角標位置上;
3)希爾排序效率最高;
4)java中有自帶的排序程序:Arrays.sort(arr);
三、 查找
查找某個關鍵字在數組中第一次出現的位置,折半算法效率較高。
四、 進制轉換
經過取餘來獲取某個位上的值,能夠經過查表法來進行轉換,取值更方便。