標籤:java 快速排序 遞迴
<pre name="code" class="java">package com.test.linked;public class QuickSort {public class Array{private int[] Myarray;private int size;public Array(int max){Myarray=new int[max];size=0;}/** * 插入資料 * @param value */public void insert(int value){Myarray[size]=value;size++;}/** * 排序 */public void sort(){reQuickSort(0,size-1);}/** * 排序,利用遞迴將數組分為更小的兩個數組 * @param left * @param right */public void reQuickSort(int left,int right){if(right-left<=0){return;}else{int center=Myarray[right];int partition=partitionArray(left,right,center);reQuickSort(left,partition-1);reQuickSort(partition+1,right);}}/** * 定義樞紐(center)位置 * @param left * @param right * @param center * @return */public int partitionArray(int left,int right,int center){int leftpart=left-1;int rightpart=right;while(leftpart<rightpart){while(Myarray[++leftpart]<center&&leftpart<right);//找到比center更大的數while(rightpart>=left&&Myarray[--rightpart]>center);//找到比center更小的數if(leftpart>=rightpart){break;}else{swap(leftpart,rightpart);// 將兩數交換}}swap(leftpart,right);//重新記錄樞紐的位置return leftpart;//因為left和right交換所以返回leftpart}/** * 交換資料 * @param leftpart * @param rightpart */public void swap(int leftpart,int rightpart){int temp=Myarray[leftpart];Myarray[leftpart]=Myarray[rightpart];Myarray[rightpart]=temp;}/** * 顯示數組 */public void display(){System.out.println("array begin");for (int i = 0; i < size; i++) {System.out.println(Myarray[i]);}}}public static void main(String[] args){int max=10;QuickSort sort=new QuickSort();Array test=sort.new Array(10);for (int i = 0; i <max ; i++) {test.insert((int) (Math.random()*87));}test.display();test.sort();test.display();}}
資料:
<pre name="code" class="java">array begin218104846867630172array begin021721304648768186
java實現快速排序