1. 程式人生 > 其它 >Java實現氣泡排序,選擇排序,二分查詢

Java實現氣泡排序,選擇排序,二分查詢

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, int
x, 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("]");
    }
}