Java 劃分排序

來源:互聯網
上載者:User

標籤:排序   劃分   

劃分:

指定一個關鍵值key

從左右兩邊進行迴圈劃分操作,將小於等於key的放左邊,大於等於key的放右邊

劃分後的序列不一定全部有序

O(N)  只有一趟排序


/** * 劃分  *  * @author stone * @date   2015-7-29 下午4:37:16 */public class Partition {public static void main(String[] args) {int[] ary = Util.generateIntArray(10);Util.printArray(ary);int pivot = 3;int partDex = sort(ary, 0, ary.length - 1, pivot);System.out.println("關索引值是" + pivot + ",劃分的index是" + partDex);Util.printArray(ary);}private static int sort(int[] ary, int left, int right, int pivot) {int leftPtr = left - 1;  //左邊 再左一位   操作時需要先++int rightPtr = right + 1; //右邊 再右一位  操作時需要先--while (true) {while (leftPtr < right && ary[++leftPtr] <= pivot); //leftPtr指向的項 > 關索引值 停止while (rightPtr > left && ary[--rightPtr] >= pivot); //rightPtr指向的項 < 關索引值 停止if (leftPtr >= rightPtr) {break;} else {//leftPtr rightPtr 指向的項所在的位置都不正確  應該交換swap(ary, leftPtr, rightPtr);}/* *  繼續下一次迴圈。 前面的錯誤位置的項已經交換了。 左右指標繼續移動 */}System.out.println("l=" + leftPtr + ",r=" + rightPtr);return rightPtr;//返回 leftPtr也可以}private static void swap(int[] ary, int a, int b) {int temp = ary[a];ary[a] = ary[b];ary[b] = temp;}}

輸出

[2, 6, 9, 8, 4, 0, 5, 1, 7, 3]l=3,r=2關索引值是3,劃分的index是2[2, 1, 0, 8, 4, 9, 5, 6, 7, 3]

結果:

在<=index 的位置 <key; 在>index的位置>=key

在<=index 的位置 <=key; 在>=index的位置>key


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

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.