快速排序(java实现)
package sort; public class QuickSort { static void qsort(int []a,int low,int high){ int pivot; while(low<high){ pivot=partition(a,low,high);//算出枢轴值位置 qsort(a,low,pivot); //对低子表递归 low=pivot+1; //尾递归,这种写法减少递归层数 } } static int partition(int a[],int low,int high){ int mid=(low+high)>>1; /*前中后三点三数取中,让a[low]为中间值*/ if(a[low]>a[high]) swap(a,low,high); if(a[mid]>a[high]) swap(a,mid,high); if(a[mid]>a[low]) swap(a,low,mid); int pivotkey=a[low]; //枢轴值 while(low<high){ while(low<high&&a[high]>=pivotkey) high--; a[low]=a[high]; while(low<high&&a[low]<=pivotkey) low++; a[high]=a[low]; } a[low]=pivotkey; return low; //返回枢轴值在排序后所在位置 } static void swap(int a[],int low,int high){ int temp=a[low]; a[low]=a[high]; a[high]=temp; } public static void main(String []args){ int[] b = { 49, 38, 65, 97, 76, 13, 27, 50 }; qsort(b, 0, b.length - 1); for(int w:b) System.out.print(" "+w); } }