① 代碼:
目前創(chuàng)新互聯(lián)公司已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、宣恩網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
public?class?quicksortdemo?{
private?int?array[];
private?int?length;
public?void?sort(int[]?inputArr)?{
if?(inputArr?==?null?||?inputArr.length?==?0)?{
return;
}
this.array?=?inputArr;
length?=?inputArr.length;
quickSort(0,?length?-?1);
}
private?void?quickSort(int?lowerIndex,?int?higherIndex)?{
int?i?=?lowerIndex;
int?j?=?higherIndex;
//?calculate?pivot?number
int?pivot?=?array[lowerIndex+(higherIndex-lowerIndex)/2];
//?Divide?into?two?arrays
while?(i?=?j)?{
while?(array[i]??pivot)?{
i++;
}
while?(array[j]??pivot)?{
j--;
}
if?(i?=?j)?{
swap(i,?j);????????????????
i++;
j--;
}
}
//?call?quickSort()?method?recursively
if?(lowerIndex??j)
quickSort(lowerIndex,?j);
if?(i??higherIndex)
quickSort(i,?higherIndex);
}
private?void?swap(int?i,?int?j)?{
int?temp?=?array[i];
array[i]?=?array[j];
array[j]?=?temp;
}
public?static?void?main(String?a[]){
quicksortdemo?sorter?=?new?quicksortdemo();
int[]?input?=?{24,2,45,20,56,75,2,56,99,53,12};
sorter.sort(input);
for(int?i:input){
System.out.print(i);
System.out.print("?");
}
}
}
② 運行:
c:\java?quicksortdemo
2?2?12?20?24?45?53?56?56?75?99
/**
?*?快速排序
?*/
private?static?void?quickSort?(?int[]?array,?int?start,?int?end?)
{
if?(start??end)
{
int?key?=?array;
int?i?=?start;
for?(?int?j?=?start?+?1;?j??end?+?1;?j++?)
{
if?(key??array[j])
{
int?temp?=?array[j];
array[j]?=?array[i?+?1];
array[i?+?1]?=?temp;
i++;
}
}
array?=?array[i];
array[i]?=?key;
quickSort?(array,?start,?i?-?1);
quickSort?(array,?i?+?1,?end);
}
}
int[]?array?=?new?int[]?{?11,?213,?134,?65,?77,?78,?23,?43?};
quickSort?(array,?0,?array.length?-?1);
System.out.println?(Arrays.toString?(array));
快速排序:
package org.rut.util.algorithm.support;
import org.rut.util.algorithm.SortUtil;
/**
* @author treeroot
* @since 2006-2-2
* @version 1.0
*/
public class QuickSort implements SortUtil.Sort{
/* (non-Javadoc)
* @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
*/
public void sort(int[] data) {
quickSort(data,0,data.length-1);
}
private void quickSort(int[] data,int i,int j){
int pivotIndex=(i+j)/2;
//swap
SortUtil.swap(data,pivotIndex,j);
int k=partition(data,i-1,j,data[j]);
SortUtil.swap(data,k,j);
if((k-i)1) quickSort(data,i,k-1);
if((j-k)1) quickSort(data,k+1,j);
}
/**
* @param data
* @param i
* @param j
* @return
*/
private int partition(int[] data, int l, int r,int pivot) {
do{
while(data[++l]pivot);
while((r!=0)data[--r]pivot);
SortUtil.swap(data,l,r);
}
while(lr);
SortUtil.swap(data,l,r);
return l;
}
}
改進后的快速排序:
package org.rut.util.algorithm.support;
import org.rut.util.algorithm.SortUtil;
/**
* @author treeroot
* @since 2006-2-2
* @version 1.0
*/
public class ImprovedQuickSort implements SortUtil.Sort {
private static int MAX_STACK_SIZE=4096;
private static int THRESHOLD=10;
/* (non-Javadoc)
* @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
*/
public void sort(int[] data) {
int[] stack=new int[MAX_STACK_SIZE];
int top=-1;
int pivot;
int pivotIndex,l,r;
stack[++top]=0;
stack[++top]=data.length-1;
while(top0){
int j=stack[top--];
int i=stack[top--];
pivotIndex=(i+j)/2;
pivot=data[pivotIndex];
SortUtil.swap(data,pivotIndex,j);
//partition
l=i-1;
r=j;
do{
while(data[++l]pivot);
while((r!=0)(data[--r]pivot));
SortUtil.swap(data,l,r);
}
while(lr);
SortUtil.swap(data,l,r);
SortUtil.swap(data,l,j);
if((l-i)THRESHOLD){
stack[++top]=i;
stack[++top]=l-1;
}
if((j-l)THRESHOLD){
stack[++top]=l+1;
stack[++top]=j;
}
}
//new InsertSort().sort(data);
insertSort(data);
}
/**
* @param data
*/
private void insertSort(int[] data) {
int temp;
for(int i=1;idata.length;i++){
for(int j=i;(j0)(data[j]data[j-1]);j--){
SortUtil.swap(data,j,j-1);
}
}
}
}
Java中的快速排序一個簡單的例子
public class QuickSort {
public static void sort(Comparable[] data, int low, int high) {
// 樞紐元,一般以第一個元素為基準進行劃分
Comparable pivotKey = data[low];
// 進行掃描的指針i,j;i從左邊開始,j從右邊開始
int i = low;
int j = high;
if (low high) {
// 從數(shù)組兩端交替地向中間掃描
while (i j) {
while (i j data[j].compareTo(pivotKey) 0) {
j--; }
// end while
if (i j) {
// 比樞紐元素小的移動到左邊
data[i] = data[j];
i++;
}
// end if
while (i j data[i].compareTo(pivotKey) 0) {
i++;
}
// end while
if (i j) {
// 比樞紐元素大的移動到右邊
data[j] = data[i];
j--;
}
// end if
}
// end while
// 樞紐元素移動到正確位置
data[i] = pivotKey;
// 前半個子表遞歸排序
sort(data, low, i - 1);
// 后半個子表遞歸排序
sort(data, i + 1, high);
}
// end if
}
// end sort
public static void main(String[] args) {
// 在JDK1.5版本以上,基本數(shù)據(jù)類型可以自動裝箱
// int,double等基本類型的包裝類已實現(xiàn)了Comparable接口
Comparable[] c = { 4, 9, 23, 1, 45, 27, 5, 2 };
sort(c, 0, c.length - 1);
for (Comparable data : c) {
System.out.println(data);
}
}
}
真的是很服你,你把這個新建一個類放里面
在主方法里面這樣寫:
自己建個數(shù)組Comparable[] data,
定義參數(shù)int low, int high
QuickSort qs = new QuickSort();
qs.sort([] data, low, high);