代码如下:
public class quick_sort { //输出函数 static void disp(int[] a,int n){ int i; for(i=0;i<n;i++){ System.out.print(a[i]+" "); } System.out.println(); } //划分算法 static int partition(int a[],int low,int high)//partition 划分,分割,分区 { //进行一趟排序,返回枢纽位置 //a[low]=a[0] int pivotkey=a[low];//保存枢纽记录关键字,用子表的第一个记录做枢纽记录 while(low<high) //从序列两端交替向中间扫描,直到low=high为止 { while(low<high && a[high]>=pivotkey)//从右向左寻找,直到找到一个比枢纽小的元素 high--; if(low<high) a[low]=a[high];//比枢纽小的记录移到低端 while(low<high && a[low]<=pivotkey) //从左往右寻找,直到找到一个比枢纽大的元素 low++; if(low<high) a[high]=a[low];//比枢纽大的记录移到高端 } a[low]=pivotkey;//枢纽记录到位 return low;//返回枢纽位置 } //递归排序 static void quickSort(int a[],int low,int high){ if(low<high){ int pivotloc=partition(a,low,high); //pivotloc是枢纽位置 quickSort(a,low,pivotloc-1); //对左子表递归排序 quickSort(a,pivotloc+1,high); //对右子表递归排序 } } public static void main(String[] args) { // TODO 自动生成的方法存根 int n=10; int[] a={2,5,1,7,10,6,9,4,3,8}; System.out.print("排序前:"); disp(a,n); System.out.print("排序后:"); quickSort(a, 0, n-1); disp(a,n); } }