算法基础之排序篇-快速排序
2012-08-07 17:25
363 查看
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)
相关文章推荐
- 基础排序算法之快速排序(Quick Sort)
- 基础排序算法之快速排序(Quick Sort)
- 【基础算法】排序-复杂排序之二(快速排序)
- 算法基础之排序—快速排序
- 基础算法--排序:之快速排序
- PHP四种基础算法详解(冒泡排序、选择排序、插入排序、快速排序)
- 基础算法之排序--快速排序
- C++——算法基础之排序——快速排序
- 基础算法:插入排序
- 交换排序算法---冒泡排序与快速排序
- 算法基础:排序与查找
- 算法--排序--分治与快速排序
- 算法基础:排序(三)——快速排序——Python实现
- 基础算法-直接选择排序
- 算法入门-快速排序-基本快速排序方法
- 【Python排序搜索基本算法】之快速排序
- 【基础算法】选择排序
- 学习算法 -- 马桶排序、冒泡排序和快速排序
- 基于JAVA的排序算法之五--快速排序
- 【基础算法】排序-复杂排序之一(归并排序的两种优化讨论)