public class 快速排序 {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public static void quicksort(int arr[], int left, int right) {
//如果左边索引比右边索引大是不合法的,直接结束使用方法;
if(left>right) {
return;
}
int base = arr[left];//定义变量base指向最左边
//定义i和j分别指向最左边和最右边
int L=left,R=right;
//如果左边索引不等于右边索引继续检索
while (R!= L) {
//注意:如何设置最左边的数为基准数,先从右向左检索
//右边本身是放比base大的数,检索到大于或等于base的数不做处理,继续向左检索
while(arr[R]>=base&&R>L) {
R--;
}
//当左边检索值小于等于基准数base时,继续向右检索
while (arr[L] <= base&&L<R) {
L++;
}
//run到了这里说明i和j停下了,i位置的数和j位置的的数互换位置
int temp=arr[L];
arr[L]=arr[R];
arr[R]=temp;
}
//程序跳出while循环到了这里说明i和j到达了同一个位置。
//如果i和j到达同一个位置,就将基准数位置的元素和相遇位置的元素互换位置
arr[left]=arr[L];
arr[L]=base;
//第一次排序结束
//排基准数左边
quicksort(arr, left,R-1);
//排基准数右边
quicksort(arr, R+1, right);
}
}
java快速排序框架
最新推荐文章于 2022-11-21 09:07:20 发布