使用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大元素这一章节时发现王争对归并和快排的理解非常透彻,讲得也非常好,所以想 ...
随机推荐
- php laravel+nginx 除了根目录都报404 解决
在nginx的配置文件加 location / { try_files $uri $uri/ /index.php?$query_string; } 即可!!!!!!!
- linux虚拟机长时间不用时间改回来的方法
1. 时间和时区 地理课上我们都学过格林威治时间(GMT), 它也就是0时区时间,但是我们在计算机中经常看到的是UTC,它是Coordinated Universal Time的简写, 虽然可以认为U ...
- linux系统下常用的命令(吐血自己整理,且用且珍惜)
1)linux命令太多,有时候记不起来是哪个,为了方便大家查询,自己吐血整理了以下这些,转载时请标明出处,珍惜原创成果 吐血自己整理,且用且珍惜) 吐血自己整理,且用且珍惜) 吐血自己整理,且用且珍惜 ...
- 3.搭建Samba服务器
1.在CentOS7上yum安装samba服务: yum -y install samba 2.目前我是直接共享已经存在的目录,如果您需要共享一个未曾创建的目录,需要您新创建一个目录: vim /et ...
- UE4 Creating 3D Widget Interaction
https://docs.unrealengine.com/en-us/Engine/UMG/HowTo/InWorldWidgetInteraction
- 基于STM32F429+HAL库编写的定时器主从门控模式级联输出固定个数PWM脉冲的程序
硬件设备 42步进电机,步进电机驱动器,正点原子F429开发板 开发软件 keil5,Cube 综述 一般要精准的控制电机,就要控制单片机的引脚输出指定个数的PWM波,有多种可实现的方法 ...
- Pycharm配置支持vue语法
1. 2. 3. 4. 5.
- html跳动的心实现代码
<style> .box{ width: 200px; height: 400px; positio ...
- OGRE Tutorials 1
[Guide to building OGRE] 1.Preparing the build environment You should now create a build directory f ...
- mysql转移数据目录后无法启动问题
最近在学习mysql,将mysql的数据目录文件路径/var/lib/mysql转移到/data/mysql,然后通过软连接方式关联. 1. ln -s /data/mysql /var/lib/my ...