【基本思想】

快速排序在元素较多的情况下,排序效率是相当高的。其基本思想是这样:

假设数组为int[] arr = { 49, 38, 65, 97, 76, 13, 27, 22, 26, 41, 13, 17, 32 },数组元素个数为13个。

选定a[0]为left标记,a[12]为right标记,基准点pivot的初始位置一般也为a[0](其值记为p)。

定义i,j分别代表了不断变化的left和right标记。

此时,先让基准点归位。即以p为基准,左侧元素均小于p,右侧元素均大于p。

具体即为:

1.左标记不断右移,比较p与所在位置元素的大小,若比p大,停止比较,记下此点;

2.右标记不断左移,比较p与所在位置元素的大小,若比p小,停止比较,记下此点;

3.交换左右标记;

4.直至左右标记重合,这个位置就是基准点的位置。

然后被基准点分开的这两小段序列重复上述步骤。

【代码实现】

     public static void quickSort(int[] arr, int left, int right) {
// 如果left不小于right,需要排序的部分只有一个元素,方法结束调用。
if (left >= right) {
return;
}
// 将最左侧的元素设置为pivot(基准点)
int p = arr[left];
// 把比p小的放到左边,比p大的放到右边。
int i = left, j = right;
while (i < j) {
// j向左移,找到一个比p小的元素。
while (arr[j] >= p && i < j) {
j--;
}
// i向右移,找到一个比p大的元素。
while (arr[i] <= p && i < j) {
i++;
}
// i和j交换。
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 让基准点归位,此时i与j是相同的,用谁都行。
arr[left] = arr[i];
arr[i] = p;
// 基准点左侧序列的元素递归进行快速排序。
quickSort(arr, left, i - 1);
// 基准点右侧序列的元素递归进行快速排序。
quickSort(arr, i + 1, right);
}

最新文章

  1. js框架模版
  2. C语言基础(4)-原码,反码,补码及sizeof关键字
  3. Memcache笔记03-php操作Memcached
  4. ASP.NET Webform和ASP.NET MVC的区别
  5. 由于管理员设置的策略,该磁盘处于脱机状态-Win 2008 R2
  6. 用Python写的批量文件重命名
  7. Java笔记(三十)&hellip;&hellip;正则表达式
  8. 备战“软考”之软件project
  9. niop 2014寻找道路
  10. php 输出昨天,今天,明天是星期几的方法
  11. CentOS7 安装zookeeper
  12. SQL Server使用规范
  13. leaflet 利用ajax 将前端地图上的数据post到后台
  14. 使用TensorFlow实现DNN
  15. python_猜年龄
  16. 一行代码实现数组去重(ES6)
  17. ios端滚动优化
  18. 【转】BFG Repo-Cleaner: Removes large or troublesome blobs like git-filter-branch does, but faster.
  19. NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
  20. POI插入图片至Excel使用固定的长宽

热门文章

  1. js---json对象拆分
  2. Oracle12c 的安装教程图解(安装系统:windows 2008R2)
  3. Swift 通过字符串创建控制器
  4. AngularJs中,如何在ng-repeat完成之后,执行Js脚本
  5. 【python】获取http响应
  6. Linux编程学习笔记(二)
  7. java----Java的栈,堆,代码,静态存储区的存储顺序和位置
  8. 课外知识----ini
  9. Decimal integer conversion
  10. Vue-cli 创建的项目配置跨域请求(通过反向代理)---配置多个代理--axios请求