快速排序实现(java)
不废话了,快速排序算法原理就不写了,直接上代码:
package com.sort;
public class QuickSort {
public static void main(String[] args) {
Integer[] array = new Integer[]{2, 4, 3, 1, 7, 9, 7, 6, 8, 5, 1, 21, 32, 54, 65, 43, 32, 99};
int low = 0;
int high = array.length;
quickSort(array, 0, high - 1);
}
/**
* 快速排序递归调用,每一次选取基准数进行低位和高位部分分别排序
*
* @param array 数组
* @param low 低位索引
* @param high 高位索引
*/
public static void quickSort(Integer[] array, int low, int high) {
//基准数
int pos = array[low];
if (low < high) {
//排序算法 返回高低位的分割点,用于分治每次排序返回的结果,进行高低位的区分
int temp = sorAlgorithm(array, low, high, pos);
display(array);
//低位部分排序
quickSort(array, low, temp - 1);
//高位部分排序
quickSort(array, temp + 1, high);
} else {
return;
}
}
/**
* 显示数组
*
* @param array 输出数组
*/
private static void display(Integer[] array) {
if (array == null) {
return;
}
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + ",");
}
System.out.println();
}
/**
* 交换两个数位置
*
* @param array 数组
* @param l 交换数字索引
* @param h 交换数字索引
*/
private static void swap(Integer[] array, int l, int h) {
int temp = array[l];
array[l] = array[h];
array[h] = temp;
}
/**
* 排序算法,将数组中数字以基准数为标准分为两部分
*
* @param array 待排序数组
* @param low 低位索引
* @param high 高位索引
* @param pos 基准数
*/
public static Integer sorAlgorithm(Integer[] array, int low, int high, int pos) {
//找出高位比基准数小的数字
while (low < high) {
while (low < high && array[high] >= pos) {
high--;
}
swap(array, low, high);
//找出比低位大的数字
while (low < high && array[low] <= pos) {
low++;
}
swap(array, low, high);
}
//返回比较的分割索引,也就是分割下次递归中的高位低位的标记
return low;
}
}