import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] a= {23,10,12,6,2,3,1,5,7,9,4,8};
qsort(a,0,a.length-1);
System.out.println(Arrays.toString(a));
}
/**
* 递归调用快速排序
* @param a
* @param r
* @param p
*/
public static void qsort(int[] a,int r,int p) {
//判断当前数组是否还有元素
if(r<p) {
int j=partition(a,r,p);
qsort(a,r,j-1);//对左半段进行递归排序
qsort(a,j+1,p);//对右半段进行递归排序
}
}
/**
*
* @param a数组
* @param r起始下标
* @param p末尾下标
* @return 返回下标位置
*/
public static int partition(int[] a,int r,int p) {
int i=r+1;
int j=p;
int x=a[r];
while(true) {
//从头开始扫描,找到大于x的第一个元素位置
while(a[i]<x&&i<p) {
i++;
}
//从最后开始往前扫面,找到小于x的第一个元素位置
while(a[j]>x) {
j--;
}
if(i>=j) {
break;//找到x正确的下标则跳出循环体,i后面的数组元素都大于x,j以及前面的都小于x
}
swap(a,i,j);//将小于x的元素移到左边,大于x的移到右边
}
swap(a,r,j);//将x移动到正确位置,左边小于x,右边大于x
return j;
}
/**
* 交换数组两个指定下标的元素
* @param a
* @param i
* @param j
*/
public static void swap(int[] a,int i,int j) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
快速排序java实现(基础)
最新推荐文章于 2022-11-30 08:55:12 发布