快速排序java

來源:互聯網
上載者:User

標籤:

  快速排序(Quicksort)是對冒泡排序的一種改進。它是先在數組中找到一個關鍵數,第一趟排序將比關鍵數小的放在它的左邊,比關鍵數大的放在它的右邊。當第一趟排序結束後,再依次遞迴將左邊和右邊的進行排序,直到最後整個數組都有序為止。

  一趟快速排序的演算法是:

1)設定兩個變數i、j,排序開始的時候:i=0,j=N-1;2)以第一個數組元素作為關鍵資料,賦值給 key,即 key=A[0];3)從j開始向前搜尋,即由後開始向前搜尋(j--),找到第一個小於 key的值A[j],將A[j]和A[i]互換;4)從i開始向後搜尋,即由前開始向後搜尋(i++),找到第一個大於 key的A[i],將A[i]和A[j]互換;5)重複第3、4步,直到i=j; (3,4步中,沒找到合格值,即3中A[j]不小於 key,4中A[i]不大於 key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到合格值,進行交換的時候i, j指標位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令迴圈結束)。  圖解:   下面是代碼的實現  快速排序類:
package com.dxx.order;public class QuicSort {    public int[] sortArrs(int []arrs,int low,int high){        int l = low;        int h = high;        int povit = arrs[low];        //當l<h時,繼續遞迴排序,當l=h時,說明已經一趟排序成功,退出        while(l<h){            //關鍵點和右邊的h位元比較,如果小於右邊h位的數,則h-1,即右邊的標誌左移一位            while(l<h && arrs[h]>povit)                h--;            if(l<h){            //當關鍵點大於h標誌位的數時,交換兩數的位置,l++,將關鍵點和左邊l標誌位的數比較            int temp = arrs[l];            arrs[l] = arrs[h];            arrs[h] = temp;            l++;            }            //反過來,將關鍵數與左邊的數進行比較            while(l<h && arrs[l]<povit)                l++;            if(l<h){            //當關鍵點小於l標誌位的數時,交換兩數的位置,h--,當l=h時一趟排序結束              int temp = arrs[l];            arrs[l] = arrs[h];            arrs[h] = temp;            h--;            }        }            if(l>low)sortArrs(arrs, low, l-1);            if(h<high)sortArrs(arrs, h+1, high);        return arrs;    }        public void printArrs(int []arrs){        for(int i :arrs){            System.out.print(i + "   ");        }        System.out.println();    } }

 

 主程式運行類:

  

package com.dxx.order;public class MainTest {    public static void main(String[] args) {        int arrs[] = {14,3,2,5,12,8,6,7,10,11,1,9,13};        QuicSort quicSort = new QuicSort();        quicSort.printArrs(arrs);        arrs = quicSort.sortArrs(arrs,0,arrs.length-1);        quicSort.printArrs(arrs);    }}

 

   

快速排序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.