1. 程式人生 > >Java 快速排序法

Java 快速排序法

原理簡介

       快速排序原理即是,選擇陣列中的一個元素作為基準值 pivot(通常使用第一個就行),然後遍歷其他元素,將小於 pivot 的元素放置在左邊,將大於 pivot 的元素放置在右邊。如是你可以得到兩個子陣列,再依次對子陣列進行快速排序,最終完成排序。

時間複雜度

        快速排序比選擇排序快得多,其時間複雜度為 O(n * lg n),是最快的排序演算法之一。最糟糕的情況下,快速排序的時間複雜度為 O(n^2)。

程式碼實現

        Java 的快速排序示例如下:

public class Main {

    public static void main(String[] args) {
        int[] arr = new int[] { 5, 4, 8, 6, 3, 9, 0, 1, 7, 2 };
        quickSort(arr, 0, arr.length - 1);
        printArray(arr);
    }
    
    public static void quickSort(int[] arr, int start, int end) {
        if (end <= start) {
            return;
        }
        int low = start;
        int high = end;
        int pivot = arr[low];
        while (low < high) {
            while (low < high && arr[high] >= pivot) {
                high--;
            }
            arr[low] = arr[high]; // 將小於 pivot 的數放在地位
            while (low < high && arr[low] <= pivot) {
                low++;
            }
            arr[high] = arr[low]; // 將大於 pivot 的數放在高位
        }
        arr[low] = pivot;
        quickSort(arr, start, low - 1); // 遞迴排序左半部分
        quickSort(arr, low + 1, end); // 遞迴排序右半部分
    }
    
    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

}

執行結果為:

0 1 2 3 4 5 6 7 8 9 

相關推薦

Java 快速排序

原理簡介        快速排序原理即是,選擇陣列中的一個元素作為基準值 pivot(通常使用第一個就行),然後遍歷其他元素,將小於 pivot 的元素放置在左邊,將大於 pivot 的元素放置在右邊。如是你可以得到兩個子陣列,再依次對子陣列進行快速排序,最終完成排序。

Java常用的八種排序演算法與程式碼實現(二):歸併排序快速排序

注:這裡給出的程式碼方案都是通過遞迴完成的 --- 歸併排序(Merge Sort):   分而治之,遞迴實現   如果需要排序一個數組,我們先把陣列從中間分成前後兩部分,然後對前後兩部分進行分別排序,再將排好序的數組合並在一起,這樣整個陣列就有序了   歸併排序是穩定的排序演算法,時間

Java 實現快速排序對陣列進行排序

 快速排序是對氣泡排序的一種改進,其排序速度相對較快。 基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料要小,然後再按照這個方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列的目的。最壞情況的

快速排序 Java實現

   快速排序法又叫二分法排序: import java.util.Random; public class Quicksort { public static void main(String

快速排序-Java實現

public static void quickSort(int[] a, int left, int right) { int f, t; int rtemp, ltemp; ltemp = left; rtemp = right; f = a[(left + right)

快速排序java 程式碼)

遞迴實現快速排序法:  * 以一個值為基準值(通常第一個),把陣列分成兩部分: 前面部分的值都比基準值小, 後面部分的值都比基準值大. * 1.每一次遞迴迴圈以第一個值為分界點, * (1).先從後面開始檢索,值比基準值大就略過,比之小就把此值移到左邊指標位置 * (2).再

快速排序

ron 它的 jet amp uek cnblogs 方法 ++ 部分 這個排序方法的時間復雜度為O(nlogn),最壞時間復雜度為O(n^2),所以說是屬於所有排序方法中比較高效率的一種了。 這種排序方法的基本思想是: 先找到一個區間中的一個基準點,然後找到這個區間

java快速排序

clas end 一個 bsp string 處理 bre 大於 tostring 代碼如下: public class QuickSort { //交換data數組中i和j兩處索引的元素 private static void swap(DataWrap

C語言實現快速排序(分治法)

下一個 enter hang partition 等於 就是 tor log markdown title: 快速排序法(quick sort) tags: 分治法(divide and conquer method) grammar_cjkRuby: true ---

java——快速排序基準位置的選取方法和快速排序優化

一、 快速排序基準位置的選取方法 1.固定位置法(就是選取的基準是固定的、一般是陣列的第一個元素) 2.隨機選取基準法 import java.util.Arrays; import java.util.Random; /** * @ClassName TestDemo3

Java快速排序演算法的實現

高快省的排序演算法 有沒有既不浪費空間又可以快一點的排序演算法呢?那就是“快速排序”啦!光聽這個名字是不是就覺得很高階呢。 假設我們現在對“6  1  2  7  9  3  4  5 10  8”這

快速排序為什麼一定要從右邊開始

while(arr[j]>=temp&&i<j){ j--; } while(arr[i]<=temp&&i<j){ i++; } 這裡兩個while的順序是不能改變的,想一想: 假設對如下進行排

php四種基礎演算法:冒泡,選擇,插入和快速排序 程式碼練習

function maopao($arr,$len) { for($i=1;$i<$len;$i++) { for($j=0;$j<$len-$i;$j++) { if($arr[$j]>$arr[$j+1])

快速排序 拉格朗日插值 二分

快速排序法(泛型) static void Main(string[] args) { Console.WriteLine("請輸入待排序數列(以\",\"分割):"); string _s = Console.ReadLine(); string[] _

快速排序(一)

https ffffff roc 技術分享 快速 nag 習慣 ado follow 由於作者不習慣該編輯器,只是貼出上本文的截圖,詳見:https://www.yuque.com/docs/share/33cb075a-ce6e-45f3-8de0-0ea0f749d1

快速排序(二)

term log -o mar 技術 href ges ima process 由於作者不習慣該編輯器,只是貼出上本文的截圖,詳見:https://www.yuque.com/docs/share/3592da47-f9a5-4837-b2f6-1b553fcd8e3e快

Java 快速排序 整理知識點

1.什麼是排序? 排序是按照某種順序(升序或者降序)排列序列元素的一種演算法。 2.為什麼需要排序? 排序是電腦科學中的重要演算法,排序有時候可以顯著降低問題的複雜度,可以使用排序作為減少查詢複雜度的一種技術。鑑於排序的重要性,已有針對排序演算法的大量研究並將其

Java 快速排序 看著一片就夠了

樓主在複習快速排序的時候發現了很多問題,其中也參照了大神的程式碼,進行了程式碼的詳細說明 大神程式碼地址,有很好的圖例說明 請點選 我的程式碼實現 package sort; public class QuickSort { /**

快速排序(golang實現)

快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n

Java 歸併排序

一、原理簡介 歸併排序又稱合併排序,即針對兩個已經排序好的陣列,將其合併為一個排序陣列。歸併過程中,依次比較兩個陣列中的元素,將較小值(假設為升序排序)放入新陣列中,最終遍歷完兩個陣列後完成排序。 歸併排序是一種速度較快的排序方法。 二、時間複雜度 當我們合併 兩