使用Python完成排序(快排法、归并法)
class Sort(object):
def quick_sort(self, ls):
self.quick_sort_helper(ls, 0, len(ls) - 1)
return ls
def quick_sort_helper(self, ls, start, end):
if end <= start:
return
pivot_index = random.randint(start, end)
pivot = ls[pivot_index] # pivot value
ls[pivot_index], ls[end] = ls[end], ls[pivot_index] # swap with the value in index end.
boundary = start # boundary is in index start.
for i in range(start, end):
if ls[i] < pivot:
ls[i], ls[boundary] = ls[boundary], ls[i] # swap with the value in index i.
boundary += 1
ls[boundary], ls[end] = ls[end], ls[boundary] # lie the pivot in index boundary.
self.quick_sort_helper(ls, start, boundary - 1)
self.quick_sort_helper(ls, boundary + 1, end)
def merge_sort(self, ls):
buffer = ls[:]
self.merge_sort_helper(ls, buffer, 0, len(ls) - 1)
return ls
def merge_sort_helper(self, ls, buffer, start, end):
if end <= start:
return
middle = (start + end) // 2
self.merge_sort_helper(ls, buffer, start, middle)
self.merge_sort_helper(ls, buffer, middle + 1, end)
i1, i2 = start, middle + 1
for i in range(start, end+1):
if i2 > end:
buffer[i] = ls[i1]
i1 += 1
elif i1 > middle:
buffer[i] = ls[i2]
i2 += 1
elif ls[i1] < ls[i2]:
buffer[i] = ls[i1]
i1 += 1
else:
buffer[i] = ls[i2]
i2 += 1
ls[start:end+1] = buffer[start:end+1]
if __name__ == '__main__':
ls = [1, 9, 5, 4, 3, 7, 6]
s = Sort()
print(s.quick_sort(ls[:]))
print(s.merge_sort(ls[:]))
使用Python完成排序(快排法、归并法)的更多相关文章
- Java 排序(快排,归并)
Java 排序有Java.util.Arrays的sort方法,具体查看JDK API(一般都是用快排实现的,有的是用归并) package yxy; import java.util.Arrays; ...
- 排序 之 快排、归并、插入 - <时间复杂度>----掌握思想和过程
俗话说:天下武功无坚不破,唯快不破.对于算法当然也是要使用时间最短.占用空间最小的算法来实现了. 注意:我代码里面打的备注仅供参考,建议不要背模板(因为没有固定的模板),可以写一个数列按着代码跑两圈或 ...
- 数据结构--排序--快排and冒泡(python)
听说大厂面试,限时两分钟写出来快排... 闲着没事,写了一下... def Partition(L,low,high): pivotkey = L[low] while low<high: wh ...
- python 冒泡排序,快排
一.冒泡排序 1.1.冒泡的原理 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的 ...
- python 冒泡和快排,不多说【无聊】
#-*-coding:utf8-*- import random a=[] b=[] def init_array(): for i in range(10000): v = random.randi ...
- python 冒泡和快排,不多说
#-*-coding:utf8-*- import random a=[] b=[] def init_array(): for i in range(10000): v = random.randi ...
- 用python写个快排
快排过程比较简单就直接上代码了: #!/usr/bin/python3 def quik_sort(L, left, right): if left <= right: key = L[left ...
- 快排,归并和Shell排序
快速排序 快速排序的执行流程: (1) 先从数列中取出一个数作为基准数. (2) 将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. (3)再对左右区间重复第二步,直到各区间只有一个数. ...
- [排序] 快排 && 冒泡(自己写)
#include <iostream> using namespace std; /* 快速排序 通过一趟排序,以轴点为界 分割为两部分:左部分 <= 轴点 <= 右部分 再分 ...
- 如何用快排思想在O(n)内查找第K大元素--极客时间王争《数据结构和算法之美》
前言 半年前在极客时间订阅了王争的<数据结构和算法之美>,现在决定认真去看看.看到如何用快排思想在O(n)内查找第K大元素这一章节时发现王争对归并和快排的理解非常透彻,讲得也非常好,所以想 ...
随机推荐
- linux命令--cut的使用
cut 是一个选取命令,将一段数据进行分析,取得我们想要的 语法: cut (参数)(文件) 常用参数: -b:仅显示行中指定直接范围的内容:(以字节为单位分割) -c:仅显示行中指定范围的字符:(以 ...
- 关于新学期Python的一点见解
首先很高兴选到了Python,之前学习过c语言,不过学的不大好. 我希望此次课程能够教会我们如何运用Python解决生活中的一些小问题,或者可以解决其他学科上的一些问题,当然有关人工智能方面的最好. ...
- rest_famework 认证与权限组件
定义个一个认证类 from rest_framework import exceptionsfrom rest_framework.authentication import BaseAuthenti ...
- spark各种模式提交任务介绍
前言 本文章部分内容翻译自: http://spark.apache.org/docs/latest/submitting-applications.html 应用提交 Spark的bin目录中的sp ...
- python学习 生成随机函数 random模块的用法
random模块是用于生成随机数 常用函数 函数 含义 random() 生成一个[0,1.0)之间的随机浮点数 uniform(a,b) 生成一个a到b之间的随机浮点数 randint(a,b) 生 ...
- python中线程2
cpython中的GIL和pool GIL锁(全局解释器锁) 1.what? GIL是全局解释器锁,和普通锁加在数据上不同的是:GIL加在加在解释器上,是为了防止多个线程在同一时间执行python字节 ...
- 使用百度ocr接口识别验证码
#!/usr/bin/env python #created by Baird from aip import AipOcr def GetCaptchaV(filename): APP_ID = ' ...
- 什么是jquery
框架就是一个半成品,不能直接使用,需要加工处理后才可使用
- 在类文件中创建 写入Json文件
由于业务需要 今天写了一个方法能够定时更新Json文件 即定时从数据库中查询数据 然后转化为Json对象 如果有数据的话 删掉之前的Json文件 重新创建一个文件 然后写入Json对象 中间走了很多弯 ...
- c语言:第二次作业,循环结构
1.本章学习总结(2分) 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 循环相比分支和顺序结构难了许多,相对的来说我的c语言的基础比之前有提高,但是还是很多题想了很久也 ...