/**
* 快速排序是分治方法的一种
* 基本思想就是先将序列分为左边小于右边的两部分
* 然后对两边分别再进行同样的排序工作
* 用的是递归的方法
*/
package al;
public class QuickSort {
public static void main(String[] args) {
//舒适化数组
int[] array = {1, 4, 6, 8, 9, 2, 3, 0,7,5};
int length = array.length;
//开始排序
QuickSort qs = new QuickSort();
qs.sort(array, 0, length-1);
//打印排序后的数组值
for(int i=0; i<length; i++){
System.out.print(array[i]+" ");
}
}
/**
* 划分为左边小于中枢,右边大于中枢的两部分,然后对两部分分别递归排序
* @param array 待排序列
* @param left 左边索引
* @param right 右边索引
*/
public void sort(int[] array, int left, int right) {
if (left < right) { //不要忘了结束条件
int p = partition(array, left, right);
sort(array, left, p-1);
sort(array, p+1, right);
}
}
/**
* 这个是最重要的函数
* @param array 数组
* @param left 左边索引
* @param right 右边索引
* @return 中枢索引
* (a) 1, 4, 2, 5, 3 (假设此时store=2)
* (b) 1, 2, 4, 5, 3 (因为2比3小,所以交换)
* (c) 1, 2, 3, 5, 4 (最后将中枢换到中间)
*/
public int partition(int[] array, int left, int right) {
// select right value as pivot
int store = left; //store表示比pivot值小的元素索引
for(int i=left; i<right;i++) {
if (array[i] < array[right]) { //一旦比pivot(中枢)小
swap(array, i, store); // ,就将该值交换到左边
store ++; //指向下一个放置小值的位置
}
}
swap(array, store, right); //最后将中枢值放到小值和大值的中间
return store; //返回中枢索引
}
/**
* 交换数组中两个元素的值
* @param array 数组
* @param i 元素的索引
* @param j 元素的索引
*/
public void swap(int[] array, int i, int j) {
int tmp;
tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
Java实例17 - 快速排序 quick sort
最新推荐文章于 2024-05-30 21:10:29 发布