算法練習5---快速排序Java版

基本思想:經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據都要小,而後再按此方法對這兩部分數據分別進行快速排序,整個排序過程能夠遞歸進行,以此達到整個數據變成有序序列。java

例如 3 1 5 2 7 9 3 0數組

首先以3爲基準數,基準數的意思就是以這個數爲參考,其餘數和它作比較,如今例若有兩我的,分別從左邊和右邊開始找,右邊的人要找到比基準數3小的數,左邊的人找比基準數3大的數,找到之後進行交換,右邊的人先開始找,例如上面的數組,右邊的人從0開始找,0比3小,記錄下這個數字,左邊的人從3開始找,找到5比3大,  ,如今把這兩個數交換位置獲得新的數組3 1 0 2 7 9 3 5,右邊的人繼續重複上述步驟找到2,左邊的人到了2也沒有比3大的數字,因而兩我的在數字2相遇了,就把基準數3和這個2交換,獲得新的數組2 1 0 3 7 9 3 5,把3看作分割點,整個數組分爲兩部分,左邊的2 1 0和右邊的7 9 3 5重複上述步驟繼續排序ui

java代碼以下:spa

public class QuickSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        QuickSort qs = new QuickSort();
        int[] score = {10,9,8,7,6,5,4,3,2,1};
        qs.quickSort(score,0,score.length-1);
        for(int i=0;i<score.length;i++){
            System.out.print(score[i]+"   ");
        }
    }

    public void quickSort(int[] a,int left,int right){
        int i,j,t,temp;
        if(left>right)
            return;
        i= left;
        j = right;
        temp = a[left];
        while(i!=j){
            while(a[j]>=temp && i<j)
                j--;
            while(a[i]<=temp && i<j)
                i++;
            if(i<j){        
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
        a[left]=a[i];
        a[i]=temp;
        quickSort(a,left,i-1);
        quickSort(a,i+1,right);
        
    }

}

 

執行結果:code

1   2   3   4   5   6   7   8   9   10 
相關文章
相關標籤/搜索