快排 是我们平时经常会用到的算法,今天来解析下运算过程
解析:1.对一个数组进行进行快排,首先在数组中选定一个基址(base),start(待排区间首部,一开始我们定为0),end(待排区间尾部)。
2.i和j分别从首尾开始
下面是代码(数组版)
package sort;
/**
* 快速排序
* @author pual
* 2018-3-23
*/
public class QuickSort {
private static void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
private static void subSort(int[] data, int start, int end) {
if (start < end) {// 9, -16, 21, 23, -30, -49, 21, 30, 30
int base = data[start];
int i = start;
int j = end + 1;
while (true) {
while (i < end && data[++i] - base <= 0)
;
while (j > start && data[--j] - base >= 0)
;
if (i < j) {
swap(data, i, j);
} else {
break;
}
}
System.out.println(java.util.Arrays.toString(data));//[9, -16, -49, -30, 23, 21, 21, 30, 30]
swap(data, start, j);
subSort(data, start, j - 1);//递归调用
subSort(data, j + 1, end);
}
}
public static void quickSort(int[] data){
subSort(data,0,data.length-1);
}
public static void main(String[] args) {
int[] data = { 9, -16, 21, 23, -30, -49, 21, 30, 30 };
System.out.println("排序之前:\n" + java.util.Arrays.toString(data));
quickSort(data);
System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
}
}