算法原理:通过一趟排序将记录分成两部分,其中一部分所有记录均比另一部分小,再继续处理两子部分。
算法实现:
import java.util.*;
public final class Test {
public static void printf(int []a)//输出打印
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
System.out.print("\n");
}
public static void QuickSort(int[]a,int low,int high)
{
if(low<high)
{
int mid=Partition(a,low,high);
printf(a);
QuickSort(a,low,mid-1);
QuickSort(a,mid+1,high);
}
}
public static int Partition(int[]a,int low,int high)
{
int tem=a[low];
while (low<high)
{
while (low<high&&a[high]>=tem)//从右向左扫描
{
high--;
}
swap(a,low,high);
while (low<high&&a[low]<=tem)//从左向右扫描
{
low++;
}
swap(a,low,high);
}
return low;
}
public static void swap(int []a,int l,int h)
{
int tem=a[l];
a[l]=a[h];
a[h]=tem;
}
public static void main(String[]args)
{
int[]test={1,2,6,8,4,5,7,9,3,10,22,17,19,21,20,14,11,13,15,16,18,12};
QuickSort(test,0, test.length-1);
}
}