面试必问---快排原理分析
程序员文章站
2024-03-05 18:57:49
...
写在前面
在面试中,经常会被问到 Java 中的一些经典排序,尤以快排
为最。在 Java 中的经典排序有如下常用的几种:1.冒泡排序 2.快速排序(快排) 3.插入排序 4.归并排序 5.选择排序 6.希尔排序 7.堆排序 8.基数排序
,本文我们就来简单分析一下快排的原理
。
概念介绍
快排,又称快速排序
(Quicksort)。是对冒泡排序的一种改进。快速排序由 C. A. R. Hoare
在 1960 年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快排基本思想:
- 先从数组中取出一个数作为基准数。
- 分区过程。将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
- 再对左右区间重复第二步、第三步…直到各区间只有一个数。
原理分析:
接下来,我们通过数组[58,36,89,24,16,25,68,38,62,49,85,34]
,来进行快排原理分析
代码实现:
import java.util.Arrays;
/**
* TODO 快排实现
*
* @author liuzebiao
* @Date 2020-4-21 10:43
*/
public class QuickSort {
public static void main(String[] args) {
int[] arr = {58,36,89,24,16,25,68,38,62,49,85,34};
String s = Arrays.toString(quickSort(arr, 0, arr.length - 1));
System.out.println(s);
}
/**
* 快排
*
* @return
*/
public static int[] quickSort(int[] arr,int left,int right) {
if(left<right) {
//左
int i = left;
//右
int j = right;
//获取基准数
int key = arr[i];
while (i < j) {
while (arr[j] >= key && i < j) {
j--;
}
if (i < j) {
arr[i] = arr[j];
}
while (arr[i] <= key && i < j) {
i++;
}
if (i < j) {
arr[j] = arr[i];
}
}
arr[i] = key;
//左段递归排序
quickSort(arr, 0, i - 1);
//有段递归排序
quickSort(arr, i + 1, right);
}
return arr;
}
}
排序结果:[16, 24, 25, 34, 36, 38, 49, 58, 62, 68, 85, 89]
快速排序还有很多改进版本,如随机选择基准数
、以中间的数作为基准数
等。不过原理都是类似的。有兴趣的可以自己去研究一下。
面试必问—快排原理分析,介绍到此为止
如果本文对你有所帮助,那就给我点个赞,来个关注吧,谢谢
End
下一篇: Java 对10个数进行排序的实现代码