python 快排,堆排,归并
- #归并排序
- def mergeSort(a,L,R) :
- if(L>=R) :
- return
- mid=((L+R)>>1)
- mergeSort(a,L,mid)
- mergeSort(a,mid+1,R)
- p=L
- q=mid+1
- t=[]
- while(p<=mid and q<=R) :
- if a[p]<=a[q] :
- t.append(a[p])
- p+=1
- if a[p]>a[q] :
- t.append(a[q])
- q+=1
- while (p<=mid) :
- t.append(a[p])
- p+=1
- while(q<=R) :
- t.append(a[q])
- q+=1
- cur=0
- for i in range(L,R+1) :
- a[i]=t[cur]
- cur+=1
- a=[2,3,5,1,5]
- mergeSort(a,0,4)
- print a
- #快速排序
- import random
- def Qsort(a) :
- if a==[] :
- return []
- val=random.choice(a)
- return Qsort([x for x in a if x<val]) + [x for x in a if x==val] +Qsort([x for x in a if x>val])
- a=[1,3,4,6,2,4]
- a=Qsort(a)
- #堆排
- def heapAjust(a,pos,sz) :
- if(pos>sz/2) :
- return
- Lchild=pos*2
- Rchild=pos*2+1
- Max=pos
- if(Lchild<=sz and a[Lchild]>a[Max]) :
- Max=Lchild
- if(Rchild<=sz and a[Rchild]>a[Max]) :
- Max=Rchild
- if(Max!=pos) :
- a[Max],a[pos]=a[pos],a[Max]
- heapAjust(a,Max,sz)
- def buildHeap(a,sz) :
- for i in range(sz/2,0,-1) :
- heapAjust(a,i,sz)
- def heapSort(a,sz) :
- buildHeap(a,sz)
- for i in range(sz,0,-1) :
- a[i],a[1]=a[1],a[i]
- heapAjust(a,1,i-1)
- a=[0,1,2,5,3,4,6]
- heapSort(a,6)
- print a
python 快排,堆排,归并的更多相关文章
- 【js基础】js排序方法——快排+堆排+插排+选择排
快排 Array.prototype.fastSort = function(){ var arr = this; function sort(left, right, arr){ if( left ...
- 排序算法C语言实现——冒泡、快排、堆排对比
对冒泡.快排.堆排这3个算法做了验证,结果分析如下: 一.结果分析 时间消耗:快排 < 堆排 < 冒泡. 空间消耗:冒泡O(1) = 堆排O(1) < 快排O(logn)~O(n) ...
- java 堆排,优先级队列,归并排序
堆排 堆排是基于二叉树而得来的 例如:对一个数组 可以转为二叉树: 二叉树特性父节点为 i , 左叶子节点为2i+1:右叶子节点为2i+2; 步骤分解: 1. 先从第一个非叶子节点(即下 ...
- 2020-03-25:快排、堆排和归并都是O(nlog n)的算法,为何JDK选择快速排序?
福哥答案2020-03-26: 口诀如下:冒选插希快 堆归计桶基(冒泡,选择,插入,希尔,快速,堆,归并,计数,桶,基数)冒线 平平 稳常小选平 平平 不常小插线 平平 稳常序希线 四组 不常组快四 ...
- P1177 【模板】快速排序(学完归并和堆排之后的二更)
P1177 [模板]快速排序 不用说,连题目上都标了是一道模板,那今天就来对能用到的许多排序方式进行一个总结: 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理 ...
- 数组第K小数问题 及其对于 快排和堆排 的相关优化比较
题目描述 给定一个整数数组a[0,...,n-1],求数组中第k小数 输入描述 首先输入数组长度n和k,其中1<=n<=5000, 1<=k<=n 然后输出n个整形元素,每个数 ...
- 【Algorithm】堆排,C++实现
对一个数组中的元素按照顺序构建二叉树,就形成了一个(二叉)堆.(二叉树是虚拟的,并不是真的建立二叉树) 表示堆的数组A有两个重要属性:A.heapSize,表示堆里面有多少元素,数组里有多少元素在堆里 ...
- 造轮子-Java泛型堆排
个人博客地址:http://kyle.org.cn/2018/03/13/heapsort/ Java实现泛型堆排算法,用于N个对象中选择最大或者最小的前M个,其中M<=N 类似于Mysql中o ...
- STL_算法_Heap算法(堆排)(精)
C++ Primer 学习中. . . 简单记录下我的学习过程 (代码为主) /***************************************** STL-算法--Heap算法 堆排序 ...
随机推荐
- MongoDB管理练习
一.索引 1.插入10W条数据 文档内容为:{name:zs-i,age:1} 2016-06-07T14:35:57.041+0800 I CONTROL [initandlisten] > ...
- http与WebSocket
利用websocket连接服务器的最大特点就是:持久链接的特点. 共同点是:都是基于TCP协议进行client-server的链接,websocket是HTML5提出的一套补缺HTTP链接中不能持久链 ...
- 几个windows使用小技巧
windows使用技巧 保存网页上图片时,可以按住左键把图片拖到右下角(win+D,双屏幕直接拖动)然后就可以放在桌面啦 放大镜-->Win+加号或者减号(放大或缩小).Win + Esc(退出 ...
- 使用libsvm实现文本分类
@Hcy(黄灿奕) 文本分类,首先它是分类问题,应该对应着分类过程的两个重要的步骤,一个是使用训练数据集训练分类器,另一个就是使用测试数据集来评价分类器的分类精度.然而,作为文本分类,它还具有文本这样 ...
- codevs 1043 方格取数 2000年NOIP全国联赛提高组
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而 ...
- 课外作业(建立double类型的小数,按照四舍五入保留2位小数)
举例:
- Linux environment variables (环境变量)
Environment variables are often used to store a list of paths of where to search for executables, li ...
- mysql 根据月份查找数据
- linux 搜索文本
find -type f -name '*.php'|xargs grep '127.0.0.1' 搜索所有.php 内容 127.0.0.1 转自:http://www.cnblogs.com/w ...
- 解决普遍pc端公共底部永远在下面框架
<div style="width: 90%;height: 3000px;margin: 0 auto; background: red;"></div> ...