java排序算法之快速排序
程序员文章站
2022-03-24 13:52:40
...
快速排序
简介
快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
白话文
先把数组中的一个数当做基准数 一般以第一个数为基准数(看你喜好),定义2个参数一个是i,一个是j ,i作为第一个索引,j作为最后一个索引
然后从两边开始检索。
- 先从右边开始检索
- 若该数字大于基准数 ,就继续检索, j的索引-1。
- 若该数字小于基准数,就停下。
- .再从左边开始检索
- 若数字小于基准数,就继续检索, i 的索引+1。
- 若数字大于基准数,就停下。
- 然后交换这个2个元素
- 若两个索引相遇
- 先把相遇位置的数字与第一个索引的数字互换
- 再把相遇的数字与基准数字互换
- 交换结束 会发现 相遇位置的数左边都比它小,右边的都比他大
- 最后利用递归的方式 排序
代码
public static void qsort(int arr[], int start, int end) {
//进行判断,如果左边的索引大于右边的索引 直接结束循环
if (start > end) {
return;
}
//定义变量保存基准数
int base = arr[start];
//定义变量i 作为最左边的数
int i = start;
//定义变量j 作为最右边的数
int j = end;
//当i<j 的时候 进行操作
while (i != j) {
//由j从右像左检索 若找到比基准数小的就停下
//若比基准数大的就继续检索
while (arr[j] >= base && i < j) {
//从右向左移动
j--;
}
//i从左向右检索 若这个数大于基准数就停下
// 若比他小或等于就继续检索
while (arr[i] <= base && i < j) {
//从左往右移动
i++;
}
//当走到这里的时候 说明找到了合适的数字
// 需要交换i与j位置的元素
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//若循环结束 说明i与j相遇
arr[start] = arr[i];
//这个时候就需要把基准数与相遇位置的元素交换
//把基准数赋值给相遇位置的数
arr[i] = base;
qsort(arr, start, i - 1);
qsort(arr, j + 1, end);
return;
}
public static void main(String[] args) {
int arr[] = {1, 3, 2, 9, 6, 0, 23423, 4};
int len = arr.length - 1;
qsort(arr, 0, len);
System.out.println(Arrays.toString(arr));
}
有问题记得留言!
记得每天微笑
上一篇: 排序算法之快速排序-java篇
下一篇: Java之计数排序