Java習題(選擇,冒泡排序,折半查找)
阿新 • • 發佈:2018-04-14
args arr i+1 數字 選擇排序 技術分享 單選 custom pan
解決問題如下:
1.求1+2!+3!+...+20!的和。
2.獲取數組中的最大和最小值。
3.對數組進行選擇排序、冒泡排序。
4.在數組中查找某個數的位置(折半查找)。
折半查找: 適合順序表的查找,數組中存的是按順序排列的元素,方法如下:
定義變量low,mid,high分別指向數組中的最低位,中間和最高位的元素;比較要查找的元素和mid指向的元素,如果比mid大,則在mid和high之間繼續查找,low=mid+1;
否則在low和mid之間繼續查找,high=mid-1.直到low大於high停止,
找到要找的元素則返回標號,未找到則返回null.實際上就是比較一次能排除一半的元素,再在另一半的元素裏查找,直到找到或者失敗.
簡單選擇排序是最簡單直觀的一種算法,基本思想為每一趟從待排序的數據元素中選擇最小(或最大)的一個元素作為首元素,直到所有元素排完為止,簡單選擇排序是不穩定排序。
冒泡排序算法的運作如下:(從後往前)- 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
- 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
- 針對所有的元素重復以上的步驟,除了最後一個。
- 持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
介紹完主要的思想後接下來是代碼,因為JAVA還在初步學習中,希望大家多多指教!!!
class home { public static void main(String[] args) { System.out.println("你好!這是 1+2!+3!+...+20!求和結果"); JC(20); System.out.println(); System.out.println(); System.out.println("你好!這是獲取數組中的最大和最小值的結果"); int[] arr={2,1,3,5,9,2,7}; int[] arr1={3,2,5,8,4,15,14,1,25,6,3}; maxMin(arr); System.out.println(); System.out.println(); System.out.println("你好!這是選擇排序的結果"); xzPX(arr); System.out.println(); System.out.println(); System.out.println("你好!這是冒泡排序的結果"); mpPX(arr1); System.out.println(); System.out.println(); System.out.println("你好!這是折中選擇1的結果"); zzPX(arr,30); System.out.println(); System.out.println(); System.out.println("你好!這是折中選擇2的結果"); zzPX(arr1,14); } public static void JC(int num) { int sum=0; for (int i=1;i<=num ;i++ ) { int n=1; for(int j=1;j<=i;j++) { n=n*j; } sum=sum+n; } System.out.println("當n個階乘之和的n為"+num+"時"+"其和為"+sum); } public static void maxMin(int[] arr) { int max=arr[0]; int min=arr[0]; for (int i=0;i<arr.length ;i++ ) { if(max<arr[i]){ max=arr[i]; } if(min>arr[i]){ min=arr[i]; } } System.out.print("當數組為"); for(int j=0;j<arr.length;j++){ System.out.print(arr[j]+","); } System.out.println("其最大值為"+max+"最小值為"+min); } public static void sz(int[] arr) { for(int j=0;j<arr.length;j++){ System.out.print(arr[j]+","); } } public static void xzPX(int[] arr) { System.out.print("未改變之前數組為"); sz(arr); for (int i=0;i<arr.length ;i++ ) { for (int j=i+1;j<arr.length ;j++ ) { if(arr[i]>arr[j]){ int a=arr[j]; arr[j]=arr[i]; arr[i]=a; } } } System.out.print("改變之後數組為"); sz(arr); } public static void mpPX(int[] arr) { sz(arr); for (int i=0;i<arr.length ;i++ ) { //int b=i; for (int j=1;j<arr.length-i ;j++) { if(arr[j-1]>arr[j]){ int a=arr[j-1]; arr[j-1]=arr[j]; arr[j]=a; } //b=b+1; } } System.out.print("改變之後數組為"); sz(arr); } public static void zzPX(int[] arr,int n) { System.out.print("順序數組為"); sz(arr); System.out.print("數組長度為"+arr.length); int min=0; int max=arr.length-1; int mid=(min+max)/2; boolean a=false; while (min<max) { if (n>arr[mid]) { min=mid+1; mid=(min+max)/2; } else if(n<arr[mid]) { max=mid-1; mid=(min+max)/2; } else if(n==arr[mid]) { System.out.println("當n等於"+n+"時其索引號為 "+mid); a=true; break; } } if(a==false) { System.out.println("當n等於"+n+"時該順序數組中無其數"); } } }
執行結果如下:
Java習題(選擇,冒泡排序,折半查找)