常用八種排序總結(Java版本)

前言

說實話還是爲了準備(可能有的)面試,哈哈,先把常用的總結一下。我想的是這樣:排序算法應該要經常手撕,所以可以在markdown編輯狀態下經常寫,然後和文章裏的對一下,這樣效果可能比較好。


1.複雜度,穩定性總結

在這裏插入圖片描述
注意:一般來說最好和最快問的少


二.代碼實現

冒泡排序:

  • 介紹:一種簡單的排序算法,其方法是:首先將第一個關鍵字與第二個關鍵字進行比較,若逆序,則交換位置;然後比較第二個與第三個關鍵字,依次進行比較,直到第n-1個關鍵字和第n的關鍵字完成比較爲止。上述過程是第一趟冒泡,結果就是值最大的關鍵字排在了最後面。然後對前n-1個關鍵字進行第二趟冒泡,如此往復,直到整個序列有序爲止。

  • 優化:很明顯,若果某一趟冒泡過程中沒有發生元素位置交換,那麼此時整個序列已經是有序的,無需繼續下面的操作。

public static void bubbleSort(int[] array) {
    int len = array.length;
    for (int i = 0; i < len; i++) {
        for (int j = 0; j < len - i - 1; j++) {
            if (array[j] > array[j + 1]) {
                int temp = array[j + 1];
                array[j + 1] = array[j];
                array[j] = temp;
            }
        }
    }
}

快速排序:

  • 介紹:快速排序是對冒泡排序的一種改進,它的基本思想如下:通過一趟排序將序列分割成兩部分,其中一部分的關鍵字均大於另一部分,則可以分別對兩部分進行排序,從而使整個序列有序。
  • 步驟:首先選擇一個關鍵字作爲樞紐(通常爲第一個元素的關鍵字),然後讓所有關鍵字比樞紐小元素放在樞紐前面,比樞紐大的元素放在樞紐後面。這樣就根據樞紐最後落在的位置將序列分割成爲了兩部分。然後進行遞歸運算,就可以對數列進行排序。
public static void quickSort(int[] array, int left, int right) {
    if (left < right) {
        int pivot = array[left];
        int l = left;
        int r = right;
        while (l < r) {
            while (l < r && array[r] >= pivot) {
                r--;
            }
            array[l] = array[r];
            while (l < r && array[l] <= pivot) {
                l++;
            }
            array[r] = array[l];
        }
        array[l] = pivot;
        quickSort(array, left, l - 1);
        quickSort(array, l + 1, right);
    }
}

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