11.排序算法_1_快速排序
为什么80%的码农都做不了架构师?>>>
时间复杂度是程序运行的时间,也可以说是次数;
空间复杂度是程序占用的空间;
1.快速排序
随机选一个数,小左发左边,大的放右边。然后进行递归

递归实现
#!/usr/bin/python
# coding:utf8def quick_sort(l, start, end):i = startj = end# 结束排序if i >= j:return# 保存首个数值key = l[i]# 一次排序,i和j的值不断的靠拢,然后最终停止,结束一次排序while i < j :# 和最右边的比较,如果>=key,然后j-1,慢慢的和前一个值比较;如果值<key,那么就交换位置while i<j and key <= l[j]:print key, l[j], '*'*30j -= 1l[i] = l[j]# 交换位置后,然后在和最左边的值开始比较,如果<=key,然后i-1,慢慢的和后一个值比较;如果值>key,那么就交换位置while i<j and key >= l[i]:print key, l[i], '*'*30i += 1l[j] = l[i]l[i] = key# 左边排序quick_sort(l, start, i-1)# 右边排序quick_sort(l, i+1, end)if __name__=="__main__":l = [5, 1, 9, 3, 2, 7]quick_sort(l, 0, len(l)-1)print l
非递归实现
#!/usr/bin/python
# coding:utf8def quick_sort(l, start, end):# 保存首个数值key = l[start]# 一次排序,i和j的值不断的靠拢,然后最终停止,结束一次排序while start < end: # 和最右边的比较,如果>=key,然后j-1,慢慢的和前一个值比较;如果值<key,那么就交换位置while start < end and key <= l[end]:end -= 1l[start] = l[end]# 交换位置后,然后在和最左边的值开始比较,如果<=key,然后i-1,慢慢的和后一个值比较;如果值>key,那么就交换位置while start < end and key >= l[start]:start += 1l[end] = l[start]# 用完以后,记得把key放回去l[start] = key# print lreturn startdef position(l):start = 0end = len(l)-1stack=[]stack.append(start)stack.append(end)while len(stack):# print stackend = stack.pop(-1)start = stack.pop(-1)index = quick_sort(l, start, end)if start < index - 1:stack.append(start)stack.append(index-1)if end > index + 1 :stack.append(index+1)stack.append(end)if __name__=="__main__":l = [5, 1, 9, 3, 2, 7]print '开始', lposition(l)print '结束',l
结果:
开始 [5, 1, 9, 3, 2, 7]
结束 [1, 2, 3, 5, 7, 9]
[Finished in 0.0s]
转载于:https://my.oschina.net/repine/blog/695003
11.排序算法_1_快速排序相关推荐
- 十大排序算法之快速排序(两种方法)
十大排序算法之快速排序 本文采用Java书写选择排序,其他语言类似可以借鉴着写 思想:在待排序序列中选择一个分割元素,将待排序序列中所有比分割元素关键字小的元素移动到分割元素左侧位置:将待排序序列中所 ...
- 排序算法之----快速排序(快速上手快速排序)
排序算法之----快速排序(快速上手快速排序) 何为快速排序算法? 快速排序的基本思想又是什么? 其实很简单: 快速排序的基本思想是 1.先从数列中取出一个数作为基准数(这里我们的算法里面取数组最右边 ...
- php1到5000排序,常用的排序算法(一)--快速排序(PHP实现)
常用的排序算法系列 快速排序 假设当前需要从小到大进行排序,快速排序的核心思路是,从当前数组中,找到一个元素作为基准比较值(key),分别从两个方向进行比较.从后往前找,比key小元素放在数组前面.然 ...
- 排序算法(5)快速排序
排序算法(5)快速排序 思想:递归,分治法. 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. 3.再对左右区间重复第二步,直到各区 ...
- 【排序算法】快速排序(C语言)
[排序算法]-- 快速排序 目录 一.快速排序的单趟排序 1. 霍尔法 2. 挖坑法 3. 前后指针 二.快速排序 1. 排序步骤 2. 排序完整步骤图 3. 快速排序代码 3.1 递归实现 3.2 ...
- 常用排序算法(二)快速排序
快速排序 概要 本章介绍排序算法中的快速排序. 目录 1. 快速排序介绍 2. 快速排序图文说明 3. 快速排序的时间复杂度和稳定性 4. 快速排序实现 4.1 快速排序C实现 4.2 快速排序C++ ...
- 排序算法之快速排序详解
一.算法介绍 快速排序:快速排序的基本思想是通过一次排序将等待的记录分成两个独立的部分,其中一部分记录的关键字小于另一部分的关键字.C部分的快速排序一直持续到整个序列被排序. 任取一个元素 (如第一个 ...
- 《数据结构与算法》(二十五)- 排序算法:快速排序
目录 前言 1. 快速排序 1.1 快速排序算法 1.2 快速排序算法复杂度分析 1.3 快速排序优化 2. 总结 原文地址:https://program-park.github.io/2021/1 ...
- 【排序算法】快速排序(Quick Sort)
快速排序(Quick Sort)使用分治法算法思想. 快速排序介绍 它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分:其中一部分的所有数据都比另外一部分的所有数据都要小. ...
最新文章
- 利用st_geometry进行图形叠加分析--结合mybatis
- linux下普通用户更改密码原理(S权限)、SetUID
- 个人常用word技巧----平时编辑word能快不少~
- JS过滤表单数据中的特殊字符
- 【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能
- 用JSONObject解析和处理json数据
- FCPX插件Yanobox Motype for mac(43种动画发生器)
- 数据库工作笔记009---linux 导入导出postgresql数据库
- 某公司ASP.NET应聘上机试题
- 2012年9月ITbrand笔记本品牌排行榜
- excel各种填充的总结
- PostgreSQL的hook机制初步学习
- 供应商分级方案:企业供应商管理系统助力汽车零部件企业实现供应商自动分级
- 写博客的一些感想和想对读者说的话
- Pentest Wiki Part5 提权
- java自定义日历控件_【无私分享】修订版干货!!!一个炫酷的自定义日历控件,摆脱日历时间选择烦恼,纯福利~...
- Spark从本地文件中统计包含某个字母的行数
- 微信小程序开发工具介绍及安装(下)
- 智能信息处理笔记 遗传算法
- HTTP请求和响应格式介绍
热门文章
- linux 一次执行多条命令
- spring @Scheduled 注解实现的定时任务 3步走
- 华为笔试题-磁盘容量排序
- onvif规范的实现:server端Discovery实现,通过OnvifTestTool12.06测试
- 关于如何收集,标准化和集中化处理Golang日志的一些建议
- 《Go 语言程序设计》读书笔记 (七) Goroutine 与系统线程的区别
- 插入排序算法(C实现)
- springcloud使用zipkin和rabbitmq进行服务链路追踪
- tocmat类加载:正统的类加载
- CentOS7下LVS+Keepalived实现高性能高可用负载均衡