Java 數據結構6:插入,選擇,冒泡排序算法

插入排序

直接插入排序基本思想是每一步將一個待排序的記錄,插入到前面已經排好序的有序序列中去,直到插完所有元素爲止。

private static void insertionSort(int[] array) {
        int j;
        for (int i = 0; i < array.length; i++) {
            int temp = array[i];
            j = i;
            //循環找到,當前要插入的數據在之前的排序數組中的位置,其實將比當前值大的值都往後移了一位
            while (j > 0 && temp < array[j - 1]) {
                array[j] = array[j - 1];
                j--;
            }
            //然後將其放到找到的位置上
            array[j] = temp;
        }
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }

選擇排序

選擇排序的思想就是從循環n次,第一次將角標0及其後元素中的最小值放在角標0處,第二次將角標1及其後元素中的最小值放在角標1處,以此類推,直至最後

private static void selectSort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            int min = i;
            for (int j = i + 1; j < array.length; j++) {
                if (array[j] < array[min]) {
                    min = j;
                }
            }
            if (i != min) {
                int temp = array[i];
                array[i] = array[min];
                array[min] = temp;
            }
        }
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }

冒泡排序

冒泡排序的思想是比較相鄰的元素,如果第一個比第二個大,就交換他們兩個位置,以前特喜歡冒泡排序,因爲代碼簡單。。。

private static void sbubbleSort(int[] array) {
        for (int i = 1; i < array.length; i++) {
            for (int j = 0; j < array.length - i; j++) {
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }

對於像這三種排序大家可以debug運行,一步步看看是如何交換數據的,就立馬能清楚了

冒泡、選擇、插入排序都需要 O(N2) 時間級別。一般不會選擇冒泡排序,雖然冒泡排序書寫簡單,但是平均性能是沒有選擇排序和插入排序好的。

選擇排序把交換次數降低到最低,但是比較次數還是挺大的。當數據量小,並且交換數據相對於比較數據更加耗時的情況下,可以應用選擇排序。

在大多數情況下,假設數據量比較小或基本有序時,插入排序是三種算法中最好的選擇。

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