Java数组练习题
《Java數組練習題》
- 前言
- 1、求數組中元素的平均值
- 2、查找數組中指定元素
- 1.順序查找
- 2.二分查找
- 3、數組排序(完整冒泡排序逐級優化)
- 1.初級
- 2.使用Array.toString簡化
- 3.完整冒泡排序
- 4、數組的逆序
前言
本章是一些基礎的數組練習題,由Java進行編譯。
1、求數組中元素的平均值
給定一個整型數組, 求平均值代碼展示:
public static double avg(int[] array) {int sum = 0;for (int i = 0;i < array.length;i++) { //array.length --> 數組長度sum = sum+array[i];}return sum*1.0 / array.length;} 此處1.0要注意 也可強制類型轉換 return(double)sum / (double)arr.lengthpublic static void main(String[] args) {int[] array = {1,2,3,4,5,6};System.out.println(avg(array));}運行結果:
2、查找數組中指定元素
1.順序查找
給定一個數組, 再給定一個元素, 找出該元素在數組中的位置.代碼展示:
public static int search(int[] array,int key) {for (int i = 0; i < array.length; i++) { if (array[i] == key) {return i;}}return -1; //返回值 因為數組下標沒有負數}public static void main(String[] args) {int[] array = {1,2,3,4,5};int index = search(array,4); //(array,數字)輸入你想找的數字的下標if (index == -1) {System.out.println("沒有你要找的關鍵字!");}else {System.out.println("找到了你要的關鍵字,下標是:"+index);}}運行結果:
2.二分查找
針對有序數組, 可以使用更高效的二分查找.啥叫有序數組?
有序分為 “升序” 和 “降序”
如 1 2 3 4 , 依次遞增即為升序
如 4 3 2 1 , 依次遞減即為降序
以升序數組為例, 二分查找的思路是先取中間位置的元素, 然后使用待查找元素與數組中間元素進行比較:
1.如果相等,即找到了返回該元素在數組中的下標
2.如果小于,以類似方式到數組左半側查找
3.如果大于,以類似方式到數組右半側查找
代碼展示:
public static int binarySearch(int[] array, int key) {int left = 0;int rigth = array.length - 1;while (left <= rigth) {int mid = (left + rigth) / 2; if (array[mid] < key) { left = mid + 1; //從右側區間繼續找 }else if (array[mid] == key) {return mid; //找到了}else {rigth = mid - 1; //從左側區間繼續找}}return-1; //返回值 因為數組下標沒有負數 }public static void main(String[] args) {int[] array = {12,24,3,8,6};int index = binarySearch(array,8); //輸入數組中你想要找的數if (index == -1) {System.out.println("沒有你要找的關鍵字!");}else {System.out.println("找到了你要的關鍵字,下標是:"+index);}}運行結果:
如果是無序數組,可先將無序數組變為有序數組再使用二分法,這里用到的是Array.sort方法。
代碼展示:
public static int binarySearch(int[] array, int key) {for (int i = 0; i < array.length; i++) {if (array[i] == key) {return i;}}return -1; }public static void main(String[] args) {int[] array = {12,24,3,8,6};Arrays.sort(array); //該方法排序主要為快速排序和優化的歸并排序。System.out.println("排序之后的數組"+Arrays.toString(array));int index = binarySearch(array,8);if (index == -1) {System.out.println("沒有你要找的關鍵字");}else {System.out.println("找到了你要的關鍵字,下標是"+index);}}運行結果:
3、數組排序(完整冒泡排序逐級優化)
給定一個數組, 讓數組升序 (降序) 排序.動態圖:
1.初級
代碼展示:
public static void main(String[] args) {int[] array = {12, 24, 3, 8, 6};for (int i = 0; i < array.length - 1; i++) { //[0--length-1) i表示趟數for (int j = 0; j < array.length - 1 - i; j++) { // -i表示了優化 可以不減if (array[j] > array[j + 1]) { //判斷大小int temp = array[j];array[j] = array[j + 1]; //這三條語句實現交換array[j + 1] = temp;}}}System.out.println("從小到大排序的結果是");for (int i = 0; i < array.length; i++) { //for循環實現依次打印每個數System.out.print(array[i] + " ");}運行結果:
2.使用Array.toString簡化
最后實現打印可以使用Array.toString方法
System.out.println("從小到大排序后的結果是: "+Arrays.toString(array));
使用時要在開頭加 import java.util.Arrays; 自動導包不計
Array.toString方法實現的功能: (打印字符串)
代碼展示:
public static void main(String[] args) {int[] array = {12, 24, 3, 8, 6};for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length - 1 - i; j++) { if (array[j] > array[j + 1]) { int temp = array[j];array[j] = array[j + 1]; array[j + 1] = temp;}}}System.out.println("從小到大排序后的結果是: "+Arrays.toString(array));運行結果:
3.完整冒泡排序
由于一些數組中的數字經過一次或者兩次交換排序之后就結束了,所以就可以省略后面的交換比較過程。接下來使用一個if語句完成最佳的冒泡排序。
代碼展示:
public static void main(String[] args) {int[] array = {12, 24, 3, 8, 6};for (int i = 0; i < array.length - 1; i++) { boolean flg = false; //布爾型(boolean)它的取值只能是常量true或者falsefor (int j = 0; j < array.length - 1 - i; j++) { if (array[j] > array[j + 1]) { int temp = array[j];array[j] = array[j + 1]; array[j + 1] = temp;flg = true; //打個比方 2 1 3 4 5 最開始flg=false 2大于1進行了一次交換之后} //flg=true 之后2不大于3 不再進行交換}if (flg == false){break;}}System.out.println("從小到大排序后的結果是: "+Arrays.toString(array));運行結果:
4、數組的逆序
給定一個數組, 將里面的元素逆序排列設定兩個下標, 分別指向第一個元素和最后一個元素. 交換兩個位置的元素.
然后讓前一個下標自增, 后一個下標自減, 循環繼續即可
代碼展示:
public static void reverse(int[] array) {int left = 0;int right = array.length-1;int tmp = 0;while (left < right) {tmp = array[left];array[left] = array[right];array[right] = tmp;left++;right--;}}public static void main(String[] args) {int[] array1 = {12,24,3,8,6};System.out.println("逆置之前的數組:"+ Arrays.toString(array1));reverse(array1);System.out.println("逆置之后的數組:"+ Arrays.toString(array1));}代碼過程:
運行結果:
總結
- 上一篇: jar打包 剔除第三方依赖以及它的依赖_
- 下一篇: 源码 移植_FreeModbus移植总结