Java必須要學會的四種排序方法

public static void main(String[] args) {
    int[] array = new int[]{5, 9, 8, 7};
    //maopaoSort(array);
    //selectSort(array);
    //insertSort(array);
    quickSort(array, 0, array.length - 1);
}

private static void printInt(int[] array) {
    for (int i = 0; i < array.length; i++) {
        System.out.print(array[i] + "  ");
    }
}

/**
 * @description:每次循環冒泡一個最大or最小數
 * @param:
 * @return:
 */
private static void maopaoSort(int[] array) {
    if (array.length <= 1) {
        printInt(array);
        return;
    }
    for (int i = 0; i < array.length; 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;
            }
        }
    }
    printInt(array);
}

/**
 * @description: 每次找出最小數
 * @param:
 * @return:
 */
private static void selectSort(int[] array) {
    if (array.length <= 1) {
        printInt(array);
        return;
    }
    int minIndex;
    for (int i = 0; i < array.length; i++) {
        minIndex = i;
        for (int j = i; j < array.length; j++) {
            if (array[j] < array[minIndex]) {
                minIndex = j;
            }
        }
        int temp = array[i];
        array[i] = array[minIndex];
        array[minIndex] = temp;

    }
    printInt(array);

}

/**
 * @description 默認第一個數已排序,第二個數爲要插入的數據
 * @param:
 * @return:
 */
private static void insertSort(int[] array) {
    if (array.length <= 1) {
        printInt(array);
        return;
    }
    for (int i = 1; i < array.length; i++) {
        int insertNum = array[i];
        int j = i - 1;
        while (j >= 0 && array[j] > insertNum) {
            array[j + 1] = array[j];
            j--;
        }
        array[j + 1] = insertNum;
    }
    printInt(array);
}


public static void quickSort(int[] array, int start, int end) {
    if (start < 0 || end >= array.length || start > end) return;
    int smallIndex = partition(array, start, end);
    System.out.println(smallIndex);
    if (smallIndex > start) {
        quickSort(array, start, smallIndex - 1);
    }
    if (smallIndex < end) {
        quickSort(array, smallIndex + 1, end);
    }
    printInt(array);

}

/**
 * 快速排序算法——partition
 *
 * @param array
 * @param start
 * @param end
 * @return
 */
public static int partition(int[] array, int start, int end) {
    int pivot = (int) (start + Math.random() * (end - start + 1));
    int smallIndex = start - 1;
    swap(array, pivot, end);
    for (int i = start; i <= end; i++)
        if (array[i] <= array[end]) {
            smallIndex++;
            if (i > smallIndex)
                swap(array, i, smallIndex);
        }
    return smallIndex;
}

/**
 * 交換數組內兩個元素
 *
 * @param array
 * @param i
 * @param j
 */
public static void swap(int[] array, int i, int j) {
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}
發佈了16 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章