快速排序
如果有人问我什么是快速排序,第一反应就是将乱序的数从小到大排列好,也可以是从大到小。好像其他的也说不出什么了,还有一个就是简称"快排"。
先说一说快排的基本思想
1.先从数列中取出一个数作为基准数(简单起见就选第一个数)
2.分区过程:将比这个数大的数全放到他的右边,比他小的数全放到他的左边(分治)
3.再对左右两边的区重复第一步和第二部操作,直到各区间只有一个数(递归)
简单来说就是: 快速排序 = 冒泡 + 分治 + 递归
下面就来呈上任何人 都可以看明白的图解
(我是用word表格画的,所以只能截图了)
下面上代码
package com.qcby.lp;
import java.util.Arrays;
/**
* 快速排序
* author lp
* Date 2019.06.04
*/
public class TestKSPX {
public static void KSPX(int [] arr){
int l = 0;
int h = arr.length - 1;
KSPX(arr,l,h);
}
private static void KSPX(int[] arr, int l, int h) {
if(l<h){
//分区 返回分区界限索引
int index = part(arr,l,h);
//左分区快速排序
KSPX(arr, l, h-1);
//右分区快速哦哎嘘
KSPX(arr, l+1, h);
}
}
private static int part(int[] arr, int l, int h) {
//指定i,j
int i= l;
int j = h;
//指定基准数(第一个数)
int x = arr[l];
while(i<j){
while(arr[j]>=x && i<j){
j--;
}
if(i<j){
arr[i] = arr[j];
i++;
}
while(arr[i] <=x && i<j){
i++;
}
if(i<j){
arr[j] = arr[i];
j--;
}
}
arr[i] = x;
return i;
}
public static void main(String[] args) {
//定义一个无序数组
int arr[] = {72,6,57,88,60,42,83,73,48,85};
//输出无序数组
System.out.println(Arrays.toString(arr));
//快速排序
KSPX(arr);
//输出有序数组
System.out.println(Arrays.toString(arr));
}
}
程序运行截图
(转载或引用请标明出处,谢谢!)