1. 程式人生 > >JAVA中快速排序演算法的實現

JAVA中快速排序演算法的實現

使用快速排序演算法對a[0,n-1]進行排序,從a[0,n-1]中選擇一個元素作為middle,該元素為中點(支點),把剩下的元素分為兩段——left和right;使得left中的元素都小於或等於中點,right中的元素都大於或等於中點。遞迴的使用快速排序演算法分別對left和right進行排序,所得到的結果為left+middle+right,並且,left和right都為有序的序列。

選取最右的元素值,以之為軸,劃分左右範圍,並使得軸左邊小於元素值,軸右邊大於元素值,找到左邊比軸大的 找到右邊比軸小的 交換這兩個值 直到左右下標重合。
排序實現的演算法

package com.QuickSort;

public
class QuickSort { private double[] theArray; //記錄私有屬性 private int nElems; //記錄陣列長度 //建構函式建立陣列 public QuickSort(int max) { // TODO Auto-generated constructor stub theArray = new double[max]; nElems = 0; } //------------------------------------------
//將元素插入陣列 public void insert( double value){ theArray[nElems]= value; nElems++; } //------------------------------------------ //列印陣列 public void display(){ System.out.print("A="); for(int j = 0; j<nElems; j++){ System.out.print(theArray[j]+" "
); } System.out.println(); } //--------------------------------------------- //執行快速排序方法 public void quicksort(){ recQuickSort(0,nElems - 1); } //-------------------------------------------- public void recQuickSort(int left,int right){ if(right - left <= 0){ return; //排序結束 } else{ double pivot = theArray[right]; //獲取最右元素值 //以最右元素為軸,劃分左右部分 int partition = partitionIt(left, right, pivot); //對partition元素右邊進行排序 recQuickSort(left, partition-1); //對partition元素左邊進行排序 recQuickSort(partition+1,right); } } //總體思想是,找到左邊比pivot的元素,最右邊比pivot小的元素,交換這兩個元素 //迴圈進行以上的工作,直至左右下標重疊 private int partitionIt(int left, int right, double pivot) { // 定義左右下標 int leftPtr = left-1; int rightPtr = right; while(true){ //找出比pivot大的左邊的元素 while(theArray[++leftPtr]<pivot) ; //找出比pivot小的右邊的元素 while(rightPtr>0 && theArray[--rightPtr] > pivot) ; if(leftPtr >= rightPtr)//左下邊大於右下標結束 break; else swap(leftPtr,rightPtr); } swap(leftPtr,right); return leftPtr; } private void swap(int dex1, int dex2) { // 交換元素 double temp = theArray[dex1]; theArray[dex1] = theArray[dex2]; theArray[dex2] = temp; } }

排序呼叫的演算法

package com.QuickSort;

public class QuickSortApp {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int maxSize = 16;
        QuickSort arr = new QuickSort(maxSize);
        for( int j = 0; j < maxSize; j++){
            double n = (int) (java.lang.Math.random()*99);
            arr.insert(n);
        }
        arr.display();
        arr.quicksort();
        System.out.println("排序後");
        arr.display();
    }

}