算法基础之排序篇-快速排序
来源:互联网 发布:华为官网下载软件 编辑:程序博客网 时间:2024/05/22 21:57
1、算法描述
快速排序是冒泡排序的一种改进。快速排序是通过一次排序将待排序列分成两部分,一部分小于等于基准数,一部分大于等于基准数,再分别对两部分进行快速排序。
一趟快速排序的操作步骤
(1)、设置两个变量i和j,i=0,j=n-1。(2)、以data[0]为基准数,mark=data[0]
(3)、j向前搜索(j--),找到第一个小于基准数mark的数data[j],交换data[j]与data[i]
(4)、i向后搜索(i++),找到第一个大于基准数mark的数data[i],交换data[i]与data[j]
(5)、重复(3)(4),直到i等于j
2、图例
3、代码public void sort(int[] data) {quickSort(data, 0, data.length - 1);}private void quickSort(int[] data, int begin, int end) {int i = partition(data, begin, end);if (i > begin)quickSort(data, begin, i);if (end > i + 1)quickSort(data, i + 1, end);}private int partition(int[] data, int begin, int end) {int mark = data[begin];while (begin != end) {while (data[end] >= mark && begin != end) {end--;}if (begin == end)break;swap(data, begin, end);while (data[begin] <= mark && begin != end) {begin++;}if (begin == end)break;swap(data, begin, end);}return begin;}4、稳定性及复杂度稳定性:快速排序是不稳定的排序。平均时间复杂度:O(nlongn)
快速排序的最好情况发生在每次划分都将需要排序的序列分成大小相等的子序列时,时间复杂度为O(nlongn)
快速排序的最坏情况发生在每次划分都将需要排序的序列分成1和n-1大小的序列,时间复杂度为O(n^2)
空间复杂度:O(longn)
- 算法基础之排序篇-快速排序
- 基础算法之排序--快速排序
- 基础算法--排序:之快速排序
- 算法基础之排序—快速排序
- Java算法基础之快速排序算法
- Java算法基础之快速排序算法
- 【基础算法】排序-复杂排序之二(快速排序)
- 基础排序算法-快速排序
- 基础算法系列(十八)排序算法之快速排序
- 基础算法 快速排序
- 基础算法----快速排序
- 基础算法-快速排序
- 基础算法-快速排序
- 算法基础 快速排序
- [算法基础]快速排序
- 基础算法的总结之快速排序
- 【计蒜客】基础算法入门之快速排序
- 基础算法之四--排序:之快速排序
- DOM对象和JQuery对象的区别
- 关于DataGridView_DataError事件的问题
- 移动互联网产品经理的素养
- 网页设计自适应
- vc 按钮自绘
- 算法基础之排序篇-快速排序
- 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径
- Java虚拟机
- 一、建立uboot源码工程 (2011-03-08 11:12)
- App层face detection init分析
- Java多线程状态转换
- 二、uboot的配置过程分析 (2011-03-10 19:41)
- 在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory
- python 模块