高速排序的时间复杂度最好情况下为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实现的更多相关文章

  1. 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)

    写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的随意序列,又一次排列成一个按keyword有序的序列.因此排序掌握各种排序算法很重要. 对以下介绍的各个排序,我们假定全部排 ...

  2. C++:探究纯虚析构函数以及实现数组的高速排序与链表的归并排序

    C++:探究纯虚析构函数以及实现数组的高速排序与链表的归并排序 标签: 数据结构 数组 链表 高速排序 归并排序 抽象类 虚继承 by 小威威 1.介绍 本篇博文将通过课后作业的(15 C++ Hom ...

  3. 几种常用排序算法的python实现

    1:快速排序 思想: 任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序. 一趟快速排序的算法是: 1)设置 ...

  4. 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现

    首先是算法实现文件Sort.h.代码例如以下: <pre name="code" class="java">/* * 实现了八个经常使用的排序算法: ...

  5. C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

    C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 ...

  6. Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。

    Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得 ...

  7. 有k个list列表, 各个list列表的元素是有序的,将这k个列表元素进行排序( 基于堆排序的K路归并排序)

    解题思路: 排序方法:多路归并排序 每次将n个list的头元素取出来,进行排序(堆排序),最小元素从堆中取出后,将其所在list的下一个元素 放入堆中,调整堆序列. 函数实现原型: void list ...

  8. 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)

    不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...

  9. JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

随机推荐

  1. 带着萌新看springboot源码09(springboot+JdbcTemplate)

    emmm.....常规开局,继续说一下废话,前面简单的说了一下spring的ioc容器创建原理(花了不少时间去看了别人的博客+查了不少资料+自己的理解),相信大家对ioc容器有了一个初步的认识了. s ...

  2. RAID磁盘阵列是什么(一看就懂)

    在单机时代,采用单块磁盘进行数据存储和读写的方式,由于寻址和读写的时间消耗,导致I/O性能非常低,且存储容量还会受到限制.另外,单块磁盘极其容易出现物理故障,经常导致数据的丢失.因此大家就在想,有没有 ...

  3. 决策树 Decision Tree

    决策树是一个类似于流程图的树结构:其中,每个内部结点表示在一个属性上的测试,每个分支代表一个属性输出,而每个树叶结点代表类或类分布.树的最顶层是根结点.  决策树的构建 想要构建一个决策树,那么咱们 ...

  4. git版本控制工具的使用

    目录 git版本管理工具使用 一丶Git的下载与安装 1.windows下的git的下载与安装 2.linux下的git安装 二丶常用命令 三丶Git仓库 1.配置仓库信息 2.仓库的创建于管理 四丶 ...

  5. [十六]JavaIO之InputStreamReader 与 OutputStreamWriter

      简介 InputStreamReader OutputStreamWriter是转换流 InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流. OutputStre ...

  6. .NetCore2.1 WebAPI新增Swagger插件

    说明 Swagger是一个WebAPI在线注解.调试插件,过去我们主要通过手工撰写WebAPI接口的交互文档供前端开发人员或外部开发者, 官网地址:https://swagger.io/. 但是在实际 ...

  7. 痞子衡嵌入式:第一本Git命令教程(6)- 日志(log/reflog/gitk)

    今天是Git系列课程第六课,上一课我们学会了Git本地提交,今天痞子衡要讲的是如何查看Git本地历史提交. 当我们在仓库里做了很多次提交之后,免不了需要回看提交记录,看看自己之前的改动.有三种Git命 ...

  8. 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil

    基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil,把日常能用到的各种CRUD都进行了简化封装,让普通程序员只需关注业务即可,因为非常简单,故直接贴源代码,大家若需使用可以直 ...

  9. 超级账本fabric原理之gossip详解

    Goosip协议 去中心化.容错和最终一致性的算法 信息达到同步的最优时间:log(N). 功能: 节点发现 数据广播 gossip中有三种基本的操作: push - A节点将数据(key,value ...

  10. [JavaScript] audio在浏览器中自动播放

    audio 在浏览器中自动播放 autoplay 属性 autoplay 属性规定一旦音频就绪马上开始播放. 如果设置了该属性,音频将自动播放. 使用 autoplay 属性进行播放 //使用auto ...