java代码实现如下:
package PaiXuFenXi;
//测试方法
public class Quicksort {
public static void main(String[] args) {
int b[]={10,9,8,7,6,5,4,3,2,1};
Quicksort text=new Quicksort();
text.quick(b,0,b.length-1);
for(int i=0;i<b.length;i++)
System.out.println(b[i]);
}
//key值寻找方法
int Median3(int a[],int Left,int Right)
{
int Center=(Left+Right)/2;
if(a[Left]>a[Center]&&a[Left]<a[Right]||a[Left]<a[Center]&&a[Left]>a[Right])
{
Swap(a,Left,Right);
}
else if(a[Center]>a[Right]&&a[Center]<a[Left]||a[Center]<a[Right]&&a[Center]>a[Left])
{
Swap(a,Center,Right);
}
else if(a[Right]>a[Left]&&a[Right]<a[Center]||a[Right]<a[Left]&&a[Right]>a[Center])
{
Swap(a,Right,Right);
}
return a[Right];
}
//核心排序算法
void quick(int a[],int Left,int Right)
{
int i,j;
int Pivot;
if(Left+3<=Right)
{
Pivot=Median3(a,Left,Right);
i=Left;
j=Right-1;
for(;;)
{
while(a[i]<Pivot){i++;}
while(a[j]>Pivot){j--;}
if(i<j)
{
Swap(a,i,j);
}
else
break;
}
Swap(a,i,Right);
quick(a,Left,i-1);//对左边部分进行递归
quick(a,i+1,Right);//对右边部分递归
}
else if(Left+2==Right)//当只有三个元素时进行简单排序
{
easysort(a,Left,Right);
}
else if(Left+1==Right){//当只有两个元素时进行简单排序
easysort(a,Left,Right);
}
else if(Left==Right)//一个元素时什么都不做
{
}
}
//排序区间小于等于3时使用的排序方法
void easysort(int a[],int Left,int Right)
{
int Center=Left+1;
if(a[Left]>a[Center])
{
Swap(a,Left,Center);
}
if(a[Left]>a[Right])
{
Swap(a,Left,Right);
}
if(a[Center]>a[Right])
{
Swap(a,Center,Right);
}
}
//数值交换方法
void Swap(int a[],int j,int i){
int m;
m=a[i];
a[i]=a[j];
a[j]=m;
}
}
结果如下: