排序算法之快速排序(Java)
Posted yuwenS.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法之快速排序(Java)相关的知识,希望对你有一定的参考价值。
通过Java实现快速排序
快速排序介绍和实现
快速排序由C. A. R. Hoare在1960年提出。通过确定某一个元素排序将要排序的数据分割成两部分,一部分全部比这个元素要小,一部分全部比这个确定的元素要大,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快速排序实现图解
具体代码实现
public static void quickSort(int[] arr,int left,int right){
int l = left; //左下标
int r = right; //右下标
int pivot = arr[(left + right) / 2];
int temp = 0; //临时变量,交换值
//让比pivot值小的放到左边,比pivot值大的放到右边
while (l < r){
//在pivot的左边找到大于或等于pivot的值,才退出
while (arr[l] < pivot){
l += 1;
}
//在pivot的左边找到小于或等于pivot的值,才退出
while (arr[r] > pivot){
r -= 1;
}
//如果l >= r说明pivot的左右两边的值已经放好,左边全小,右边全大
if (l >= r){
break;
}
//交换
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
//如果交换完后,发现arr[l] == pivot值 r--,前移
if (arr[l] == pivot){
r--;
}
//如果交换完后,发现arr[r] == pivot值 l++,后移
if (arr[r] == pivot){
l++;
}
}
//如果 l == r,必须l++,r--,否则会出现栈溢出
if (l == r){
l++;
r--;
}
//向左递归
if (left < r){
quickSort(arr,left,r);
}
//向右递归
if (right > l){
quickSort(arr,l,right);
}
}
测试
测试代码
public static void main(String[] args) {
int[] arr = {2,6,8,5,3,1};
System.out.println("=================排序前===============");
System.out.println(Arrays.toString(arr));
quickSort(arr,0,arr.length-1);
System.out.println("=================排序前===============");
System.out.println(Arrays.toString(arr));
}
测试结果
以上是关于排序算法之快速排序(Java)的主要内容,如果未能解决你的问题,请参考以下文章