java快速排序 (任何人都能看懂的快速排序)
快速排序 如果有人问我什么是快速排序,第一反应就是将乱序的数从小到大排列好,也可以是从大到小。好像其他的也说不出什么了,还有一个就是简称"快排"。
先说一说快排的基本思想
1.先从数列中取出一个数作为基准数(简单起见就选第一个数) 2.分区过程:将比这个数大的数全放到他的右边,比他小的数全放到他的左边(分治) 3.再对左右两边的区重复第一步和第二部操作,直到各区间只有一个数(递归)
简单来说就是: 快速排序 = 冒泡 + 分治 + 递归
下面上代码
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)); } }