Java實現氣泡排序,選擇排序,二分查詢
阿新 • • 發佈:2021-08-15
1. 二分查詢
/*排序並查詢 對陣列{1,3,9,5,6,7,15,4,8}進行排序,然後使用二分查詢元素 6 並輸出排序後的下標。*/ public class Array04 { public static void main(String[] args) { //二分查詢的前提是:陣列為有序陣列,所以我們在二分查詢之前,先給陣列排序 int[] arr = { 1, 3, 9, 5, 6, 7, 15, 4, 8 }; maoPao(arr); System.out.println("排序結果為:"); printArr(arr); System.out.println("二分查詢的下標為:" + binarySearch(arr, 6)); }/** * 這是氣泡排序 * @param arr */ public static void maoPao(int[] arr) { for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); } } } } /** * 交換兩個變數的值 * @param arr * @param x * @param y */ private static void swap(int[] arr, intx, int y) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } /** * 二分查詢 * @param arr * @param key * @return */ public static int binarySearch(int[] arr, int key) { //定義三個變數,儲存陣列的最小,最大和中間索引 int max = arr.length - 1; int min = 0; int mid = 0; //確定中間下標的前提,陣列滿足折半條件的時候,才能有中間下標 //開始迴圈折半 while(min<=max) {//計算中間索引 mid=(min+max)/2; if(key>arr[mid]) { min=mid+1; }else if(key<arr[mid]) { max=mid-1; }else{ return mid; } } return -1; } /** * 遍歷列印陣列 * @param arr */ public static void printArr(int[] arr) { System.out.print("["); for (int i = 0; i < arr.length; i++) { if (i < arr.length - 1) { System.out.print(arr[i] + ","); } else { System.out.print(arr[i]); } } System.out.println("]"); } }
2.氣泡排序和選擇排序
public class SelectSort { public static void main(String[] args) { int[] arr= {23,12,5,67,9,0,-1}; //selectSort(arr); maoPao(arr); printArr(arr); } /** * 選擇排序 * @param arr */ public static void selectSort(int[] arr) { for (int i = 0; i < arr.length; i++) { //每一個元素都要和他後面所有的元素進行比較 for (int j = i + 1; j < arr.length; j++) { if (arr[i] > arr[j]) { swap(arr,i,j); } } } } /** * 氣泡排序:每完成一次排序,就會有一個最大值被找出來放到最後 * @param arr */ public static void maoPao(int[] arr) { for(int i=0;i<arr.length;i++) { //外層迴圈的次數就是已經排好序的原素個數,不必再將其迴圈排序 for(int j=0;j<arr.length-i-1;j++) { if(arr[j]>arr[j+1]) { swap(arr,j,j+1); } } } } /** * 交換兩個變數的值 * @param arr * @param x * @param y */ private static void swap(int[] arr,int x,int y) { int temp=arr[x]; arr[x]=arr[y]; arr[y]=temp; } /** * 遍歷列印陣列 * @param arr */ public static void printArr(int[] arr) { System.out.print("["); for (int i = 0; i < arr.length; i++) { if (i < arr.length - 1) { System.out.print(arr[i] + ","); } else { System.out.print(arr[i]); } } System.out.println("]"); } }