文章目录
图解快速排序
import java.util.Arrays;
import java.util.Random;
public class DemoQuickSort {
public static void main(String[] args) {
/* //定义数组
int[] arrays={6,3,7,9,5,1,4,8};
//调用方法,进行快速排序
quickSort(arrays,0, arrays.length-1);
System.out.println(Arrays.toString(arrays));*/
//用随机数来搞定数组
int[] arrays=new int [100000];
Random v= new Random();
for(int i=0;i<arrays.length;i++){
arrays[i]=v.nextInt();
}
long satrt=System.currentTimeMillis();
quickSort(arrays,0,arrays.length-1);
long end=System.currentTimeMillis();
System.out.println(end-satrt);
}
/**
* 定义方法,用来进行快速排序
*/
public static void quickSort(int[] arrays,int left,int right){
//进行判断,如果左边索引比右边索引要大是不合法的,直接使用return结束这个方法
if(left>right){
return;
}
//定义变量保存基准数
int base = arrays[left];
//定义变量i,指向最左边
int i=left;
//定义变量j,指向最右边
int j=right;
//当i和j不相遇的时候,在循环中进行探索
while (i!=j){
//由j从右边向左检索比基准数小的,如果检索到 比基准数小的就停下
//如果检索的比基准数大或者相等就继续检索
//注意是大于等于
while (arrays[j]>=base&&i<j){
j--;//j从右往左移动
}
//i从左往右检索
//注意是小于等于
while (arrays[i]<=base&&i<j){
i++;
}
//代码走到这里,i停了下来,j也停了下来,然后交换i和j位置的元素
int temp = arrays[i];
arrays[i]=arrays[j];
arrays[j]=temp;
}
//如果上面while循环的条件不成立,会跳出这个循环,往下执行
//如果这个条件不成立说明i和j相遇了
//如果i和j相遇了,就交换基准数这个元素和相遇位置的元素
//把相遇位置的元素赋值给基准数这个位置的元素
arrays[left]=arrays[i];
//把基准数赋值给相遇未知的元素
arrays[i]=base;
//基准数在这里就归位了,左边的数字都比他小,右边的数字都比他大
//排基准数的右边
quickSort(arrays,j+1,right);
//排基准数的左边
quickSort(arrays,left,i-1);
}
}