Sort-Quick Sort 快速排序

算法相關GitHub持續更新,歡迎打臉~

排序算法之選擇排序

時間復雜度:O(n2)

空間復雜度:O(1)

是否穩定:不穩定 1

算法:

快速排序(QuickSort)是對冒泡排序的一種改進。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。

Java實現如下

package prs.rfh.algorithm.sort;

/**
 * @author Swift
 * @version $Algorithm: QuickSort, v 0.1 2017/1/9 16:54 Swift Exp $$
 */
public class QuickSort {

    /**
     * 選取數組的begin位元素為標志位,并通過與數組的其他元素交換位置來使該元素以前的
     * 元素都不比他本身大,以后的元素都不比他小。然后遞歸的排序其以前和以后的部分
     * @param array
     * @param begin
     * @param end
     * @return
     */
    private static int[] quickSort(int[] array, int begin, int end) {

        int index = begin;
        int i = end,j=begin;
        //使該元素以前的元素都不比他本身大,以后的元素都不比他小
        while(i>j) {
            for (;i > index; i--) {
                if(array[index]>array[i]){
                    int temp = array[index];
                    array[index] = array[i];
                    array[i] = temp;
                    index = i;
                }
            }
            for (; j < index; j++) {
                if(array[index]<array[j]){
                    int temp = array[index];
                    array[index] = array[j];
                    array[j] = temp;
                    index = j;
                }
            }
        }
        //分兩部分遞歸調用
        if (index-begin>2) quickSort(array, begin, index-1);
        if (end - index + 1 >2) quickSort(array, index + 1, end);
        return array;
    }

    public static int[] quickSort(int[] array) {
        if (array==null)
            throw new IllegalArgumentException("參數非法");
        return quickSort(array, 0, array.length-1);
    }
}

【1】穩定性:

快速排序會因為與index的交換而破壞穩定性,所以選擇排序不是一個穩定的排序算法。</br>
<i>@author Swift</i>
<i>@date 2017-1-9</i>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 概述:排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,743評論 0 15
  • 概述排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的...
    Luc_閱讀 2,299評論 0 35
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好...
    依依玖玥閱讀 1,282評論 0 2
  • 總結一下常見的排序算法。 排序分內排序和外排序。內排序:指在排序期間數據對象全部存放在內存的排序。外排序:指在排序...
    jiangliang閱讀 1,375評論 0 1
  • “總算出來一個。”東伯雪鷹看著這血袍人,卻是冷聲道,“你背后的主人是誰?竟然敢施展秘術籠罩整個城池億萬生靈,如此肆...
    im喵小姐閱讀 239評論 0 0