數據結構----快速排序

1.基本思想:

選擇一個基準元素,通常選擇第一個元素和最後一個元素,通過一趟掃描,將待排序列分成兩部分,一部分比基準元素小,一部分大於登陸基準元素,此時基準元素在其排好序之後的正確位置,然後再用同樣的方法遞歸的排序劃分的兩部分。

2.實例:

這裏寫圖片描述

3.代碼實現:

package com.sfd.quicksort;

public class QuickSort {
    public static void main(String[] args) {
        int[] a = {57,68,59,52,72,28,96,33,24,19};
        quickSort(a, 0, a.length-1);
        for(int i:a){
            System.out.println(i);
        }
    }
    /**
     * 通過一次掃描將數組分成了兩部分(分區),分別對這兩部分進行partition處理;
     * 直到無法在進行分割位置,就是一個分區中只有一個數據即left>=right時
     * @param a
     * @param left
     * @param right
     */
    public static void quickSort(int[] a,int left,int right){
        int pt;
        if(left<right){
        pt = patition(a, left, right);
        quickSort(a,left, pt);
        quickSort(a, pt+1, right);
        }
    }

    /**
     * 將數組中left到right中的數進行分區,首先設定一個標準值:pivot
     * 再進行雙向掃描:大於基準值的pivot的放在右側,小於pivot的放在右側;
     * 最後當left>=right時,停止掃描;
     * 
     * @param a
     * @param left
     * @param right
     * @return
     */
    public static int patition(int[] a,int left,int right){

        int pivot = a[left];
        while(left<right){
            while(left<right&&a[right]>pivot){
                right--;
            }
            if(left<right){
                a[left++]=a[right];
            }
            while(left<right&&a[left]<pivot){
                left++;
            }
            if(left<right){
                a[right--]=a[left];
            }

        }
        a[left]=pivot;
        return left;
    }


}
發佈了56 篇原創文章 · 獲贊 31 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章