快速排序学习笔记
2014-11-02 11:26
169 查看
学习资料出处:白话经典算法系列之六
快速排序 快速搞定
快速排序采用分治策略,其基本思想:
1) 从数列中选一个元素X作为基准数
2) 分区过程,把不小于X的元素放到X的右边,小于X的元素放到X的左边
3) 再对左右区间重复进行分区操作,直到各区间只有一个数
MoreWindows总结的“挖坑填数+分治法”非常到位,其中挖坑填数将分区过程剖析的很透彻,一目了然。运用“挖坑填数”,将分区过程的步骤总结为以下4点:
1) i = left; j=right;将基准数X挖出形成第一个坑a[i],X=a[i]
2) j--,从后往前找出大于或等于基准数X的数,找到后挖出并填入前一个坑a[i]中,a[i] = a[j],此时形成新的坑a[j]
3) i++,从前往后找出不小于基准数X的数,找到后挖出并填入前一个坑a[j]中,a[j] = a[i];此时形成新的坑a[i]
4) 重复执行步骤2)、3),直到i==j,然后将基准数填入a[i]中,a[i]=X
复杂度分析
挖坑填数的分区过程,会将区间[left, right]的元素轮询一遍,其时间复杂度为O(n);基于分治法,递归调用次数为O(log(n)),因此快速排序总的时间复杂度为O(n*log(n))。
递归调用编程实现如下,若采用迭代实现呢?
测试代码:
快速排序 快速搞定
快速排序采用分治策略,其基本思想:
1) 从数列中选一个元素X作为基准数
2) 分区过程,把不小于X的元素放到X的右边,小于X的元素放到X的左边
3) 再对左右区间重复进行分区操作,直到各区间只有一个数
MoreWindows总结的“挖坑填数+分治法”非常到位,其中挖坑填数将分区过程剖析的很透彻,一目了然。运用“挖坑填数”,将分区过程的步骤总结为以下4点:
1) i = left; j=right;将基准数X挖出形成第一个坑a[i],X=a[i]
2) j--,从后往前找出大于或等于基准数X的数,找到后挖出并填入前一个坑a[i]中,a[i] = a[j],此时形成新的坑a[j]
3) i++,从前往后找出不小于基准数X的数,找到后挖出并填入前一个坑a[j]中,a[j] = a[i];此时形成新的坑a[i]
4) 重复执行步骤2)、3),直到i==j,然后将基准数填入a[i]中,a[i]=X
复杂度分析
挖坑填数的分区过程,会将区间[left, right]的元素轮询一遍,其时间复杂度为O(n);基于分治法,递归调用次数为O(log(n)),因此快速排序总的时间复杂度为O(n*log(n))。
递归调用编程实现如下,若采用迭代实现呢?
测试代码:
相关文章推荐
- 算法导论学习笔记 第7章 快速排序
- 基础算法学习笔记—快速排序
- 快速排序(Quicksort)学习笔记
- 算法学习笔记--排序之快速排序
- 快速排序学习笔记
- 快速排序学习笔记
- 数据结构 学习笔记(十一):排序(下):快速 / 表 / 桶 / 基数 排序,排序算法的比较
- C++学习笔记(二)——快速排序的库函数实现
- python数据结构学习笔记-2016-11-24-01-快速排序
- 数据结构学习笔记3.2—快速排序
- 数据结构&算法学习笔记: 快速排序
- 学习笔记:快速排序的C++、JavaScript(2种方法)、Java实现
- 8大内部排序算法学习笔记--(2)快速排序 Java实现
- 算法导论学习笔记(五):快速排序
- 算法导论学习笔记-第7章 快速排序
- 算法导论学习笔记(一)快速排序及优化
- 黑马程序员之数据结构学习笔记:快速排序
- 学习笔记之快速排序——quicklySort——基础算法——java
- 算法第四版学习笔记之快速排序 QuickSort
- 算法学习笔记之快速排序