數據結構與算法(八)排序 - 冒泡排序、插入排序、選擇排序

public class Sort {

    @Test
    public void test() {
//        PopSort(new int[]{2, 3, 1, 4, 6, 5});
//        InsertSort(new int[]{2, 3, 1, 4, 6, 5},6);
        selectionSort(new int[]{2, 3, 1, 4, 6, 5});
    }

    public void PopSort(int[] array) {

        int length = array.length;
        for (int i = 0; i < length; i++) {
            for (int j = i + 1; j < length; j++) {
                if (array[i] > array[j]) {
                    swap(array, i, j);
                }
            }
        }

        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }

    public void swap(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    /**
     * 思路:
     * 發現後面的元素大於前面的,就將其插入到合適的位置,其餘元素順序後移
     *
     * @param array
     * @param length
     */
    public void InsertSort(int[] array, int length) {
        for (int i = 1; i < length; i++) {
            int value = array[i];
            int j = i - 1;
            for (; j >= 0; j--) {
                if (array[j] > value) {
                    array[j + 1] = array[j];
                } else {
                    break;
                }
            }
            array[j + 1] = value;

        }

        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }

    }

    /**
     * 思路:
     * 從未排序的集合中,找出最小的, 放在已排序的集合末尾
     *
     * @param array
     */
    public void selectionSort(int[] array) {

        for (int i = 0; i < array.length - 1; i++) {
            int min = array[i];
            int minIndex = i;
            int j = i + 1;
            for (; j < array.length; j++) {
                if (array[j] < min) {
                    min = array[j];
                    minIndex = j;
                }
            }
            swap(array, i, minIndex);
        }

        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章