八大排序算法的python实现(四)快速排序
代码:
#coding:utf-8
#author:徐卜灵
#交换排序.快速排序
# 虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤。因此我的对快速排序作了进一步的说明:挖坑填数+分治法:
# import sys
# sys.setrecursionlimit(150000)
L = [6, 3, 2, 32, 5, 4] def Fast_sort(L, left,right):
if left >= right:
return L
key = L[left]
low = left
high = right
while left < right:
# if L[right] > key:
# right-=1
# else:
# L[left] = L[right]
# if L[left] <= key:
# left += 1
# else:
# L[right] = L[left]
# L[left] = key
while left < right and L[right] >= key:
right -= 1
L[left] = L[right]
while left < right and L[left] <= key:
left += 1
L[right] = L[left]
L[left] = key
Fast_sort(L, low, left - 1)
Fast_sort(L,left + 1,high)
return L
print Fast_sort(L,0,5) # 1.高质量代码
# def quick_sort(lists, left, right):
# # 快速排序
# if left >= right:
# return lists
# key = lists[left]
# low = left
# high = right
# while left < right:
# while left < right and lists[right] >= key:
# right -= 1
# lists[left] = lists[right]
# while left < right and lists[left] <= key:
# left += 1
# lists[right] = lists[left]
# lists[left] = key
# quick_sort(lists, low, left - 1)
# quick_sort(lists, left + 1, high)
# return lists
# print quick_sort(L,0,5) #2.高质量代码
# # 设置最低位和最高位
# def quickSort(nums, low, high):
# # 设置一个比较基准key
# key = nums[low]
# while low<high:
# # 如果最高位的数 大于等于 key则向前走
# while low<high and nums[high] >= key:
# high -= 1
# # 如果最低位的数 小于等于 key则向后走
# while low<high and nums[low] <= key:
# low += 1
# # 交换值
# nums[low], nums[high] = nums[high], nums[low]
#
# #最后low=high, 此时交换key和high位上的值, 使小于key的值在key左边, 大的在key右边
# nums[nums.index(key)], nums[low] = nums[low], nums[nums.index(key)]
# # 返回最低位的位置
# return low
#
#
# # 进行重复操作
# def interval(nums, low, high):
# if low<high:
# # 进行排序并得到最低位位置以循环操作
# key_index = quickSort(nums, low, high)
# interval(nums, low, key_index)
# interval(nums, key_index+1, high)
#
#
# nums = [64,3,9,2,4,7,0,12,45,]
# interval(nums, 0, len(nums)-1)
# print nums
#
算法理解上没有什么问题,问题在算法实现上。特别注意的是几个索引,low 和 high 做一下缓存。
另外,在用递归的时候,一定注意迭代停止的判断条件。我在写代码的时候就一直忘了加判断条件,结果总是提示错误。一个简单的错误就搞这么久。
时间复杂度:O(nlogn)
空间复杂读:O(nlogn)
非稳定排序算法。
大多数情况下的最优选的排序算法,时间复杂度低嘛。
八大排序算法的python实现(四)快速排序的更多相关文章
- 八大排序算法的 Python 实现
转载: 八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个 ...
- python基础===八大排序算法的 Python 实现
本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一 ...
- 八大排序算法---基于python
本文节选自:http://python.jobbole.com/82270/ 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 ...
- 八大排序算法的python实现(六)归并排序
代码: #coding:utf-8 #author:徐卜灵 def merge(left,right): i,j = 0,0 result = [] while i < len(left) an ...
- 八大排序算法的python实现(三)冒泡排序
代码: #coding:utf-8 #author:徐卜灵 #交换排序.冒泡排序 L = [1, 3, 2, 32, 5, 4] def Bubble_sort(L): for i in range( ...
- 八大排序算法(Python)
一.插入排序 介绍 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据. 算法适用于少量数据的排序,时间复杂度为O(n^2). 插入 ...
- 写代码?程序猿?你不能不懂的八大排序算法的Python实现
信息获取后通常需要进行处理,处理后的信息其目的是便于人们的应用.信息处理方法有多种,通常由数据的排序,查找,插入,删除等操作.本章介绍几种简单的数据排序算法和高效的排序算法. 本章主要涉及到的知识点有 ...
- [Swift]八大排序算法(二):快速排序
排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...
- 八大排序算法的python实现(八)简单选择排序
代码: #coding:utf-8 #author:徐卜灵 # L = [6, 3, 2, 32, 5, 4] def Select_sort(L): for i in range(0,len(L)) ...
随机推荐
- 【树莓派】开机自启动脚本方法之一(.Desktop文件)
转载处: 又一个让树莓派开机运行Python脚本的方法 Linux 创建启动器(.Desktop文件) 首先,树莓派使用的是官方推荐的镜像:RASPBIAN: 在树莓派上常常会需要开机自启动pytho ...
- windows 进程监控 Procmon.exe
windows 进程监控 Procmon.exe window下一个程序打开太慢,可以用此程序监控.在哪一步慢了,读取文件还是注册表. ProcessMonitor3.2 Process Monito ...
- MySQL OSC(在线更改表结构)原理
1 OSC介绍 在我们的数据库操作中,更改表结构是一个常见的操作,而当我们的表数据量非常大时,我们更改表结构的时间是非 常的长,并且在跟改期间,会生成一个互斥锁,阻塞对整个表的所有操作,这样,对于我们 ...
- nand中间出现坏块,无法正常启动内…
我板子的启动过程如下: ..showlogo.. Flash: 1 MB NAND: SLC detected.256 MB In: serial Out: serial ...
- java Web 请求servlet绘制验证码简单例子
主要用来了解java代码怎么绘制验证码图片,实际开发中不会这样用 protected void doGet(HttpServletRequest request, HttpServletRespons ...
- java基础之JDBC一:概述及步骤详解
1. JDBC的简介 概述: 就是Java用来操作不同数据库(DBMS)的类库(技术), 本质就是一些类和接口. /* 类: DriverManager 接口: Driver, Connection, ...
- 717. 1-bit and 2-bit Characters最后一位数是否为0
[抄题]: We have two special characters. The first character can be represented by one bit 0. The secon ...
- 面试题:TCP协议三次握手
一.首先了解TCP报文格式 其中必须了解的字段有: 1.源端口与目的端口:16位,标识出发送端与接收端的端口号. 2.序号:32位,也叫顺序号.seg序号,本报文段所发送的数据的第一个字节的序号,用来 ...
- ROS naviagtion analysis: costmap_2d--Costmap2DROS
博客转载自:https://blog.csdn.net/u013158492/article/details/50485418 在上一篇文章中moveBase就有关于costmap_2d的使用: pl ...
- FlyweightPattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...