快速排序学习笔记
来源:互联网 发布:旅游业网络项目概述 编辑:程序博客网 时间:2024/05/22 14:16
学习资料出处:白话经典算法系列之六 快速排序 快速搞定
快速排序采用分治策略,其基本思想:
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))。
递归调用编程实现如下,若采用迭代实现呢?
测试代码:
0 0
- 快速排序学习笔记
- 学习笔记--快速排序
- 快速排序学习笔记
- 快速排序--学习笔记
- 算法学习笔记----快速排序
- 算法学习笔记----快速排序
- 快速排序算法学习笔记
- 快速排序算法学习笔记
- 学习笔记之快速排序
- 排序学习笔记(2) - 快速排序
- 学习笔记1:冒泡排序, 快速排序
- Java学习笔记排序算法-----------快速排序
- 算法学习笔记--排序之快速排序
- 数据结构学习笔记 --- 排序(冒泡排序、快速排序)
- 数据结构学习笔记 --- 排序(冒泡排序、快速排序)
- 算法快速排序(学习笔记)
- NSGA 2 学习笔记 -- 快速排序
- 算法学习笔记之快速排序
- LA2678最短子序列
- Linux __setup解析
- 算法设计与问题特性
- WiFi基本知识
- Objective-C 随机数及数组随机取元素
- 快速排序学习笔记
- 如何删除数据库
- lua 4 函数
- Web Services
- sqlalchemy学习计划开始
- 【BZOJ】【P1135】【POI2009】【Lyz】【题解】【线段树+Hall定理】
- 学习css笔记---——字体章节(2014年11月2日)
- 轻松学会多线程(二)——多线程相关概念介绍
- LA2965侏罗纪(异或和为0的最大数字个数)