Java中常見的排序方式-快速排序(升序)

來源:互聯網
上載者:User

標籤:font   組元   --   思想   mic   soft   stat   排序   比較   

【基本思想】

快速排序在元素較多的情況下,排序效率是相當高的。其基本思想是這樣:

假設數組為int[] arr = { 49, 38, 65, 97, 76, 13, 27, 22, 26, 41, 13, 17, 32 },數組元素個數為13個。

選定a[0]為left標記,a[12]為right標記,基準點pivot的初始位置一般也為a[0](其值記為p)。

定義i,j分別代表了不斷變化的left和right標記。

此時,先讓基準點歸位。即以p為基準,左側元素均小於p,右側元素均大於p。

具體即為:

1.左標記不斷右移,比較p與所在位置元素的大小,若比p大,停止比較,記下此點;

2.右標記不斷左移,比較p與所在位置元素的大小,若比p小,停止比較,記下此點;

3.交換左右標記;

4.直至左右標記重合,這個位置就是基準點的位置。

然後被基準點分開的這兩小段序列重複上述步驟。

【代碼實現】

    public static void quickSort(int[] arr, int left, int right) {        // 如果left不小於right,需要排序的部分只有一個元素,方法結束調用。        if (left >= right) {            return;        }        // 將最左側的元素設定為pivot(基準點)        int p = arr[left];        // 把比p小的放到左邊,比p大的放到右邊。        int i = left, j = right;        while (i < j) {            // j向左移,找到一個比p小的元素。            while (arr[j] >= p && i < j) {                j--;            }            // i向右移,找到一個比p大的元素。            while (arr[i] <= p && i < j) {                i++;            }            // i和j交換。            if (i < j) {                int temp = arr[i];                arr[i] = arr[j];                arr[j] = temp;            }        }        // 讓基準點歸位,此時i與j是相同的,用誰都行。        arr[left] = arr[i];        arr[i] = p;        // 基準點左側序列的元素遞迴進行快速排序。        quickSort(arr, left, i - 1);        // 基準點右側序列的元素遞迴進行快速排序。        quickSort(arr, i + 1, right);    }

 

Java中常見的排序方式-快速排序(升序)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.