1. 程式人生 > >快速排序簡單程式碼

快速排序簡單程式碼

/**
     *  快速排序的原理:選擇一個關鍵值作為基準值。比基準值小的都在左邊序列(一般是無序的),比基準值大的都在右邊(一般是無序的)。一般選擇序列的第一個元素。
     */
	public static void sort(int[] a,int low,int high){
        int start = low;
        int end = high;
        int key = a[low];
        while(end>start){
            //從後往前比較
            while(end>start&&a[end]>=key)  //如果沒有比關鍵值小的,比較下一個,直到有比關鍵值小的交換位置,然後又從前往後比較
                end--;
            if(a[end]<=key){
                int temp = a[end];
                a[end] = a[start];
                a[start] = temp;
            }
            //從前往後比較
          while(end>start&&a[start]<=key)//如果沒有比關鍵值大的,比較下一個,直到有比關鍵值大的交換位置
               start++;
            if(a[start]>=key){
                int temp = a[start];
                a[start] = a[end];
                a[end] = temp;
            }
        //此時第一次迴圈比較結束,關鍵值的位置已經確定了。左邊的值都比關鍵值小,右邊的值都比關鍵值大,但是兩邊的順序還有可能是不一樣的,進行下面的遞迴呼叫
        }
        //遞迴
        if(start>low) sort(a,low,start-1);//左邊序列。第一個索引位置到關鍵值索引-1
        if(end<high) sort(a,end+1,high);//右邊序列。從關鍵值索引+1到最後一個
    }




//mian方法測試
public static void main(String[] args) {
		/**
		 * 快速排序
		 */
        int[] b = {12,20,5,16,15,1,30,45,23,9};
        int start = 0;
        int end = b.length-1;
        sort(b,start,end);
        for (int i=0;i<b.length-1;i++) {
			System.out.println(b[i]);
		}
	}




希望對你有所幫助!