高速排序,归并排序,堆排序python实现
高速排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n^2),平均情况下为O(n*logn),是不稳定的排序
归并排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*logn),平均情况下为O(n*logn),是稳定的排序
堆排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*logn),平均情况下为O(n*logn),是不稳定的排序
1.高速排序
高速排序的介绍以及C语言实如今这里:高速排序C语言实现
本文介绍的是高速排序python实现:
def recurse(lista,left,right):
if left<right:
i=left;
j=right;
tmp=lista[left];
while(i<j):
while(i<j and lista[j]>=tmp):
j=j-1;
if i<j:
lista[i]=lista[j];
i=i+1;
while (i<j and lista[i]<tmp):
i=i+1;
if i<j:
lista[j]=lista[i];
j=j-1;
lista[i]=tmp;
recurse(lista,left,i-1); #分治
recurse(lista,i+1,right);
return lista;
def quicksort(lista):
leng=len(lista);
recurse(lista,0,leng-1);
lista=[1,4,23,45,97,22,10,4]; #高速排序測试代码
quicksort(lista);
print lista;
2.归并排序
归并排序及C语言实如今这里:归并排序C语言实现
本文介绍的是归并排序python实现:
def merge(lista,left,mid,right): # 合并有序数组
i=left;
j=mid+1;
tmp=[];
while(i<=mid and j<=right):
if lista[i]<= lista[j]:
tmp.append(lista[i]);
i=i+1;
else:
tmp.append(lista[j]);
j=j+1;
while(i<=mid):
tmp.append(lista[i]);
i=i+1;
while(j<=right):
tmp.append(lista[j]);
j=j+1;
i=0;
while(i<right-left+1):
lista[left+i]=tmp[i];
i=i+1;
def mergerecurse(lista,left,right):
if left<right:
mid=int((right+left)/2);
mergerecurse(lista,left,mid);
mergerecurse(lista,mid+1,right);
merge(lista,left,mid,right);
return lista;
def mergesort(lista):
leng=len(lista);
mergerecurse(lista,0,leng-1);
lista=[1,4,23,45,97,22,10,4]; #測试代码
mergesort(lista);
print lista;
3.堆排序
堆排序及C语言实如今这里:堆排序C语言实现
本文介绍的是堆排序python实现:
python中提供了堆这样的数据结构。能够直接使用heap中的heappush方法来建立堆,使用heappop来弹出堆中的最小元素。
from heapq import *;
def heapsort(lista):
h=[];
for i in range(0,len(lista)):
heappush(h,lista[i]);
for i in range(0,len(h)):
lista[i]=heappop(h);
也能够自行实现heap数据结构:
def heapadjust(lista,s,end):
i=2*s+1;
tmp=lista[s];
while(i<=end):
if i+1<=end and lista[i+1]>lista[i]:
i=i+1;
if lista[i]<=tmp:
break;
lista[s]=lista[i];
s=i;
i=s*2+1;
lista[s]=tmp;
def heapsort2(lista):
n=len(lista);
for i in range((n-1)/2,-1,-1):
heapadjust(lista,i,n-1);
for i in range(n-1,-1,-1):
lista[i],lista[0]=lista[0],lista[i];
heapadjust(lista,0,i-1);
lista=[5,4,2,5,1,7]; # 堆排序測试代码
heapsort(lista);
print lista;高速排序,归并排序,堆排序python实现的更多相关文章
- 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)
写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的随意序列,又一次排列成一个按keyword有序的序列.因此排序掌握各种排序算法很重要. 对以下介绍的各个排序,我们假定全部排 ...
- C++:探究纯虚析构函数以及实现数组的高速排序与链表的归并排序
C++:探究纯虚析构函数以及实现数组的高速排序与链表的归并排序 标签: 数据结构 数组 链表 高速排序 归并排序 抽象类 虚继承 by 小威威 1.介绍 本篇博文将通过课后作业的(15 C++ Hom ...
- 几种常用排序算法的python实现
1:快速排序 思想: 任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序. 一趟快速排序的算法是: 1)设置 ...
- 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现
首先是算法实现文件Sort.h.代码例如以下: <pre name="code" class="java">/* * 实现了八个经常使用的排序算法: ...
- C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序
C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 ...
- Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。
Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得 ...
- 有k个list列表, 各个list列表的元素是有序的,将这k个列表元素进行排序( 基于堆排序的K路归并排序)
解题思路: 排序方法:多路归并排序 每次将n个list的头元素取出来,进行排序(堆排序),最小元素从堆中取出后,将其所在list的下一个元素 放入堆中,调整堆序列. 函数实现原型: void list ...
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...
- JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
随机推荐
- IntelliJ IDEA部署tomcat时Edit Configuration Deployment无artifact选项
IntelliJ IDEA,IntelliJ Idea创建web项目之后在配置web项目时,选择Edit Configration部署Tomcat,Deployment里点击添加无artifact选项 ...
- synchronized底层实现学习
上文我们总结了 synchronized 关键字的基本用法以及作用,并未涉及 synchronized 底层是如何实现的,所谓刨根问底,本文我们就开始 synchronized 原理的探索之旅吧(*& ...
- 【EF6学习笔记】目录
[EF6学习笔记](一)Code First 方式生成数据库及初始化数据库实际操作 [EF6学习笔记](二)操练 CRUD 增删改查 [EF6学习笔记](三)排序.过滤查询及分页 [EF6学习笔记]( ...
- Supervisor 为服务创建守护进程
今天需要再服务上部署一个.net 方面的项目:当时开启服务的命令只能在前台执行:使用nohub CMD &等放在后台开启服务都会宕机:所以搜寻了Supervisor 这个解决办法,为服务创建守 ...
- 痞子衡嵌入式:并行接口NAND互操作性标准(JEDEC-JESD230)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是JESD230标准. 众所周知,最早也最流行的Raw NAND接口标准是ONFI标准,痞子衡在 并行接口NAND标准(ONFI)及SLC ...
- 逐步搭建vs2015的API自带认证调用+跨域调用
demo百度网盘链接:https://pan.baidu.com/s/1HJ19RJwS6qCixui8KF8QBg 提取码:yt1c 首先我们建立一个webapi项目,这个就不需要小编解释了.如下图 ...
- Java开发笔记(五十一)多态的发生场景
江湖上传闻,面向对象之所以厉害,是因为它拥有封装.继承与多态三项神技,只要三板斧一出,号令天下谁敢不从.前面费了老大的劲才讲清楚封装和继承,那么多态又是怎样的神乎其神呢?下面先通过一个简单的例子来说明 ...
- Redis面试点
redis的数据结构有那些 字符串 String 字典:Hash 列表:List 集合:set 有序集合:sortedSet 如果大量的key设置在同一时间过期,一般需要注意什么 大量的key过期 ...
- java开发环境配置——IDEA SVN的使用
一.安装svn客户端,在idea中配置svn 装小乌龟,TortoiseSVN ,就下图一个要注意的地方,这里默认 command line client tools是不安装的,选上.如果已经安装过了 ...
- PhpStorm代码编辑区竖线的用途以及如何去掉
相信经常用PhpStorm的童鞋都知道代码区有这么一条竖线,但是知道这个竖线究竟是干嘛的么? 相传是古时代的编辑器是没有自动折行的功能的,而且终端分辨率的问题,一行只能显示80个字符,因此很多上古时代 ...