快速排序算法(JAVA)
Posted JAVA首席架构师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序算法(JAVA)相关的知识,希望对你有一定的参考价值。
如有问题或建议,请公众号留言
快速排序(Quicksort)是对冒泡排序的一种改进。
一.基本思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
二.实现原理
首先我们选择一个基准元素。
我们可以选择数列的第一个元素,也可以随机选择一个元素作为基准元素pivot。
设置两个指针left和right,指向数列的最左和最右两个元素。
选定了基准元素以后,我们要做的就是把其他元素当中小于基准元素的都移动到基准元素一边,大于基准元素的都移动到基准元素另一边。
1、先从队尾开始向前扫描且当left < right时,如果arr[right] > pivot,则right–-,但如果arr[right] < pivot,则将right的值赋值给left,即arr[left] = arr[right],同时要转换数组扫描的方式,即需要从队首开始向队尾进行扫描了 。
2、同理,当从队首开始向队尾进行扫描时,如果arr[left] < pivot,则left++,但如果arr[left] > pivot了,则就需要将left位置的值赋值给right位置,即arr[left] = arr[right],同时将数组扫描方式换为由队尾向队首进行扫描。
3、不断重复1和2,直到left>=right时(其实是left=right),left或right的位置就是该基准数据在数组中的正确索引位置。
三.代码实现
public class QuickSort {
public static void main(String[] args) {
int[] arr = {4, 6, 3, 9, 7, 1, 5, 8, 2, 10};
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
private static void quickSort(int[] arr, int left, int right) {
if (left < right) {
//找寻基准数据的正确索引
int pivotIndex = getPivotIndex(arr, left, right);
//进行迭代对index之前和之后的数组进行相同的操作使整个数组变成有序
quickSort(arr, left, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, right);
}
}
private static int getPivotIndex(int[] arr, int left, int right) {
//基准数据
int pivot = arr[left];
while (left < right) {
//当队尾的元素大于等于基准数据时,向前挪动right指针
while (left < right && arr[right] >= pivot) {
right--;
}
//如果队尾元素小于pivot了,需要将其赋值给left
arr[left] = arr[right];
//当队首元素小于等于pivot时,向前挪动left指针
while (left < right && arr[left] <= pivot) {
left++;
}
//当队首元素大于pivot时,需要将其赋值给right
arr[right] = arr[left];
}
//跳出循环时left和right相等,此时的left或right就是pivot的正确索引位置
arr[left] = pivot;
//返回pivot的正确位置
return left;
}
}
如果您喜欢,分享一下让更多的人学习
请点击标题下方的“Java野生程序猿”添加关注
或者长按下方的二维码添加关注
以上是关于快速排序算法(JAVA)的主要内容,如果未能解决你的问题,请参考以下文章