排序算法:快速排序

本質來說,快速排序的過程就是不斷地將無序元素集遞歸分割,一直到所有的分區(qū)只包含一個元素為止。主要就是將數組以一個數組內隨機的基準數進行分隔,比基準數小的在左邊比基準數大的在右邊,即從兩側向內遍歷。
排序過程:

  1. 當遍歷右側有數據小于基準數,停止遍歷,來到左側遍歷至有數據大于基準數將。將這兩者數據互換。
  2. 一直到兩者 遍歷至同一個下標,停止,將基準數與該下標對應的數據互換。
  3. 現在的狀態(tài)是基準數左邊的都小于基準數,基準數右邊的都大于基準數。
  4. 這時候,我們再以基準數為分割,以同樣的方式對基準數左側及右側分別排序。
  5. 以這樣遞歸的方式,一直到基準數左右各只有一個元素停止,這時候排序結束。
public class QuickSort {
    public static void main(String[] args) {
        int[] arr = new int[] { 1, 4, 2, 5, 2, 3, 6, 45, 234, 234, 5435,
                546546, 1, 2, 3, 4, 5 };
        int[] dividerSort = quickSort(arr);
            System.out.print("最終結果:"+Arrays.toString(dividerSort));
    }
    
    public static int[] quickSort(int[] arr) {
        return dividerSort(arr, 0, arr.length-1);;
    }

    

    public static int[] dividerSort(int[] arr, int left, int right) {
         if(left>right)
               return null;
        int i=left;
        int j = right;
        int current = arr[left];
        while (i != j) {
            while (arr[j] >= current && i < j) {
                j--;
            }
            while (arr[i] <= current && i < j) {
                i++;
            }
            if (i < j) {
                toChange(arr, i, j);
            }
        }
        
        arr[left]=arr[i];
        arr[i]=current;
        
        dividerSort(arr, left, i-1);
        dividerSort(arr, i+1, right);
        return arr;
    }

    
    public static int[] toChange(int[] arr, int i, int j) {
        int c = arr[j];
        arr[j] = arr[i];
        arr[i] = c;
        return arr;
    }

}

時間復雜度:nlog(n)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容