快速排序是一种分治法的思想,主要思想是首先找一个“基准”元素,将所有比基准元素大的元素放到基准元素右边,所有比基准元素小的元素放到基准元素左边,这样基准元素在整个序列中的最终位置就确定了,同时,基准元素经序列分为两个子序列,对子序列进行上述同样的操作,最终就能得到有序的序列。
package 排序算法;
public class 快速排序二 {
public static void main(String[] args) {
int[] a = { 21, 3, 324, 23, 534, 5, 34 };
quickSort(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i] + " ");
}
}
// 快速排序
private static void quickSort(int[] a, int left, int right) {
int split_point;
if (left < right) {
split_point = partition(a, left, right);
quickSort(a, left, split_point - 1);
quickSort(a, split_point + 1, right);
}
}
/**
* 以第一个元素为基准,将元素分成左右两部分,左边的都比基准小,右边的都比基准大。 返回基准位置
*
* @param a
* @param left
* @param right
* @return
*/
private static int partition(int[] a, int left, int right) {
int i = left, j = right, pivot = a[left]; // 以第一个元素为基准
while (i < j) {
for (; i < j && a[j] >= pivot; j--)
; // 从右边找一个比pivot小的数
a[i] = a[j]; // 将这个数放到左边空位,空位是由pivot或之前比pivot大的数留出来的
for (; i < j && a[i] < pivot; i++)
; // 从左边找一个比pivot大的数
a[j] = a[i]; // 将这个数放到右边空位
}
a[i] = pivot;
return i;
}
}
partition
函数的功能就是将整个序列分成左右两部分,中间是基准元素的最终位置,这个函数分别从右边j和左边i开始找,总的比较次数为子序列的长度-1,(第一个是pivot不用比较),且i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?