1. 程式人生 > >資料結構---查詢和排序

資料結構---查詢和排序

幾種常見的排序:冒泡,插入,選擇,快速,歸併排序

關係:排序是查詢的前提

程式碼

1.氣泡排序(BubbleSort)

public class BubbleSort {
    /**     * 
     * 氣泡排序
     * 從第一個元素開始依次和後面的元素比較,並交換位置
     * 從第二個元素開始依次和剩下的元素比較,並交換位置
     * 如此往復
     */
    public static void main(String[] args) {
        Integer[] arr = { 4, 5, 9, 8, 1, 2, 6, 7, 3 };
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    //每比較一次就就交換一次位置
                    int mid = arr[i];
                    arr[i] = arr[j];
                    arr[j] = mid;
                }
            }
        }
    }
}

2  快速排序

public class FastSort {
    /**
     * 快速排序
     * 先定義一個min代表當此迴圈的最小元素的下標
     * 先比較得到陣列中最小的元素,然後與第一個元素交換位置
     * 然後在剩下的陣列中找到最小的元素,與第二個元素交換位置
     * 如此往復
     */
    public static void main(String[] args) {
        Integer[]  arr = {4,5,9,8,1,2,6,7,3};
        for(int i =0;i<arr.length;i++){
            int min = i; 
            //先不斷比較得到最小值的下標
            for(int j=i+1;j<arr.length;j++){
                if (arr[min]>arr[j]) 
                    min=j;
            }
            //本次迴圈比較完畢後再交換位置
            int  mid = arr[i];
            arr[i]=arr[min];
            arr[min] = mid;
        }
    }
}

3 插入排序

public class InsertSort {
    /**
     * 插入排序
     * 把待排序陣列看成2部分:有序部分和無序部分
     * 有序部分從0開始向後排序,依次迴圈到最後一個元素
     */
    public static void main(String[] args) {
        Integer[] arr = { 4, 5, 9, 8, 1, 2, 6, 7, 3 ,0};
        for (int i = 0; i < arr.length; i++) {
            //長度為i的陣列內,第i個依次和前面的比較並排序
            for (int j = i; j > 0; j--) {
                if (arr[j] < arr[j - 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = temp;
                }
            }
        }
    }
}

4 .選擇排序

public class ChooseSort {

    /**
     * 選擇排序:
     * 每次從未排序序列中選出最小元素
     * 和前面已排序序列的最後一個交換位置
     */
    public static void main(String[] args) {
        Integer[] arr = { 8, 1, 3, 5, 2, 9, 0, 7, 4 };
        for (int i = 0; i < arr.length-1; i++) {
            int min = i;
            //找到該次剩餘元素的最小值
            for (int j = min + 1; j < arr.length; j++) {
                if (arr[min] > arr[j]) {
                    min = j;
                }
            }
            //與已排序的序列的最後一個值交換位置
            int temp = arr[min];
            arr[min] = arr[i];
            arr[i] = temp;
        }
        System.out.println(11);
    }

}