1. 程式人生 > >3. 排序通常有多種演算法,如氣泡排序、插入排序、選擇排序、希爾排序、歸併排序、快速排序,請選擇任意2種用java實現 [分值:20] 您的回答:(空) (簡答題需要人工評分)

3. 排序通常有多種演算法,如氣泡排序、插入排序、選擇排序、希爾排序、歸併排序、快速排序,請選擇任意2種用java實現 [分值:20] 您的回答:(空) (簡答題需要人工評分)

3. 排序通常有多種演算法,如氣泡排序、插入排序、選擇排序、希爾排序、歸併排序、快速排序,請選擇任意2種用java實現  [分值:20]

您的回答:(空)  (簡答題需要人工評分)

package com.interview;

/**
 * 各種排序演算法
 */
public class Test3 {
    public static void main(String[] args) {
        //用這個來實驗所有的排序演算法
        int[] arr = {6, 3, 8, 2, 9, 1};
        //用這個再來驗證一下
        int[] arr1 = {6, 3, 8, 2, 9, 0, 0, 2, 5, 2, 6, 8, 9, 1};
        choice(arr);
        System.out.println();
        choice(arr1);
        System.out.println();
        System.out.println("*****************************");
        insert(arr);
        System.out.println();
        insert(arr1);
        System.out.println();
        System.out.println("*******************************");
        bubbleSort(arr);
        System.out.println();
        bubbleSort(arr1);
        System.out.println();
        System.out.println("********************************");
    }

    /**
     * 快速排序
     * 應該也不難,但現在不研究,沒必要...(將來研究演算法再進行研究)、
     * 快速排序由C. A. R. Hoare在1962年提出。
     * 它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,
     * 其中一部分的所有資料都比另外一部分的所有資料都要小,
     * 然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,
     * 以此達到整個資料變成有序序列。
     */
    public static void quick() {

    }

    /**
     * 應該也不難,但現在不研究,沒必要...(將來研究演算法再進行研究)、
     * 歸併排序:
     * 歸併排序(MERGE-SORT)是建立在歸併操作上的一種有效的排序演算法,
     * 該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。
     * 將已有序的子序列合併,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。
     * 若將兩個有序表合併成一個有序表,稱為二路歸併。
     */
    public static void merge() {

    }

    /**
     * 應該也不難,但現在不研究,沒必要...(將來研究演算法再進行研究)
     * 希爾排序:
     * 先取一個小於n的整數d1作為第一個增量,把檔案的全部記錄分組。
     * 所有距離為d1的倍數的記錄放在同一個組中。先在各組內進行直接插入排序;
     * 然後,取第二個增量d2<d1重複上述的分組和排序,
     * 直至所取的增量  =1(  <  …<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。
     */
    public static void hill() {

    }

    /**
     * 選擇排序(Selection sort)是一種簡單直觀的排序演算法。
     * 它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的一個元素,
     * 存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。
     */
    public static void choice(int[] arr) {
        int temp = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] <= arr[i]) {
                    temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
            }
        }
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }

    /**
     * 插入排序
     * 原理:插入排序的思想是陣列是部分有序的,再將無序的部分插入有序的部分中去
     *
     * @param arr
     */
    public static void insert(int[] arr) {
        int temp = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = i + 1; j >= 1; j--) {
                if (arr[j] < arr[j - 1]) {
                    temp = arr[j];
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                }
            }
        }
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }


    /**
     * 氣泡排序
     * 原理:比較兩個相鄰的元素,將值大的元素交換至右端。
     */
    public static void bubbleSort(int[] arr) {
        int temp = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] >= arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }


}