一、介绍
快速排序(Quicksort)是对冒泡排序的一种改进。
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
二、思想和图解
看了写视频还是不能理、直到看到这位大佬的博客 感谢!!!
链接地址
三、个人代码
/**
* @author yeah
* @date 2020/9/2 16:04
*/
public class QuickSort {
public static void main(String[] args) {
int[] arr = new int[8000000];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random()*100000);
}
QuickSort quickSort = new QuickSort();
quickSort.getDate();
quickSort(arr,0,arr.length-1);
quickSort.getDate();
}
public static void quickSort(int[] arr, int begin, int end){
// 左边界
int b = begin;
// 右边界
int e = end;
// 基准数
int basic = arr[begin];
while (b < e){
while (basic<=arr[e] && e>b){
e--;
}
// 此时 arr[e] 预留 从下一个从左边查找到合适的值 将覆盖 arr[e]
arr[b] = arr[e];
while (arr[b]<basic && b<e){
b++;
}
// 此时 arr[b] 预留 从下一个从右边查找到合适的值 将覆盖 arr[b]
arr[e] = arr[b];
}
// 最后 b和e的值相同、选择 arr[b] 进行覆盖
arr[b] = basic;
// 递归 e-1 和 b+1 是为了跳过上一个栈被作为基数的元素
if (e>begin){
quickSort(arr,begin,e-1);
}
if (b<end){
quickSort(arr,b+1,end);
}
}
// 获取当前时间并打印
public void getDate(){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String s = format.format(new Date());
System.out.println(s);
}
}