计数排序在输入n个0到k之间的整数时,时间复杂度最好情况下为O(n+k),最坏情况下为O(n+k),平均情况为O(n+k),空间复杂度为O(n+k),计数排序是稳定的排序。

桶排序在输入N个数据有M个桶时,假设每一个桶的数据接近N/M个且桶内使用基于比較的排序,则桶排序的时间复杂度为O(N+M*N/M*log(N/M)).假设N=M时,每一个桶仅仅有一个数据,时间复杂度减少为O(N).

桶排序的时间复杂度为O(N+M),桶排序是稳定的排序

1.计数排序

计数排序介绍及C语言实如今:计数排序(链接)

def countsort(lista):
leng=len(lista);
c=[];
res=[];
for i in range(0,100):
c.append(0);
for i in range(0,leng):
c[lista[i]]=c[lista[i]]+1;
res.append(0);
for i in range(0,100):
c[i]=c[i-1]+c[i]; #c中此时存放的是小于或者等于i的数字的个数
for i in range(leng-1,-1,-1):
res[c[lista[i]]-1]=lista[i];
c[lista[i]]=c[lista[i]]-1;
return res;
lista=[5,4,2,5,1,7]; #计数排序測试代码
lista=countsort(lista);
print lista;

2.桶排序

桶排序介绍及C语言实如今:桶排序(链接)

class node:
def __init__(self,k):
self.key=k;
self.next=None; def bucketsort(lista):
h=[];
for i in range(0,10):
h.append(node(0));
for i in range(0,len(lista)):
tmp=node(lista[i]);
map=lista[i]/10;
p=h[map];
if p.key is 0:
h[map].next=tmp;
h[map].key=h[map].key+1;
else:
while(p.next !=None and p.next.key<=tmp.key):
p=p.next;
tmp.next=p.next;
p.next=tmp;
h[map].key=h[map].key+1;
k=0;
for i in range(0,10):
q=h[i].next;
while(q != None ):
lista[k]=q.key;
k=k+1;
q=q.next;
return lista;
lista=[1,4,23,45,97,22,10,4]; #桶排序測试代码
bucketsort(lista);
print lista;

计数排序、桶排序python实现的更多相关文章

  1. 记数排序 & 桶排序 & 基数排序

    为什么要写这样滴一篇博客捏...因为一个新初一问了一道水题,结果就莫名其妙引起了战斗. 然后突然发现之前理解的桶排序并不是真正的桶排序,所以写一篇来区别下这三个十分相似的排序辣. 老年菜兔的觉醒!!! ...

  2. Python线性时间排序——桶排序、基数排序与计数排序

    1. 桶排序 1.1 范围为1-M的桶排序 如果有一个数组A,包含N个整数,值从1到M,我们可以得到一种非常快速的排序,桶排序(bucket sort).留置一个数组S,里面含有M个桶,初始化为0.然 ...

  3. python 排序 桶排序

    算法思想: 桶排序将数组分到有限数量的桶里.然后每个桶里再分别排序(使用任何算法) 当要倍排序的数组内的数值时均匀分配的时候,桶排序使用线性时间O(n) 步骤: 根据最大值.最小值.桶内数据范围设定一 ...

  4. 计数排序与桶排序python实现

    计数排序与桶排序python实现 计数排序 计数排序原理: 找到给定序列的最小值与最大值 创建一个长度为最大值-最小值+1的数组,初始化都为0 然后遍历原序列,并为数组中索引为当前值-最小值的值+1 ...

  5. 计数排序和桶排序(Java实现)

    目录 比较和非比较的区别 计数排序 计数排序适用数据范围 过程分析 桶排序 网络流传桶排序算法勘误 桶排序适用数据范围 过程分析 比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比 ...

  6. 桶排序和计数排序的理解实现和比较(Java)

    比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比较排序.在排序的最终结果里,元素之间的次序依赖于它们之间的比较.每个数都必须和其他数进行比较,才能确定自己的位置.比较排序的优势是 ...

  7. 排序基础之非比较的计数排序、桶排序、基数排序(Java实现)

    转载请注明原文地址: http://www.cnblogs.com/ygj0930/p/6639353.html  比较和非比较排序 快速排序.归并排序.堆排序.冒泡排序等比较排序,每个数都必须和其他 ...

  8. 常用排序算法的python实现和性能分析

    常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...

  9. 【Python】常用排序算法的python实现和性能分析

    作者:waterxi 原文链接 背景 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试题整 ...

随机推荐

  1. Python3基础笔记---线程与进程

    参考博客:Py西游攻关之多线程(threading模块) 一.并发与并行的区别 并发:交替做不同事的能力并行:同时做不同事的能力 行话解释:并发:不同代码块交替执行的性能并行:不同代码块同时执行的性能 ...

  2. js判断浏览器的环境(pc端,移动端,还是微信浏览器)

    window.navigator.userAgent用来区分设备和浏览器 <!DOCTYPE html> <html> <head> <meta charse ...

  3. nginx开启gzip压缩后导致apk包下载不能正常安装

    最后更新时间:2019/4/27 nginx一般都会开启gzip压缩,以提升传输性能. 配置如下: gzip on; gzip_comp_level 2; gzip_min_length 1k; gz ...

  4. 特斯拉正加快部署第三代Autopilot自动驾驶计算机

    新浪科技讯,北京时间 4 月 10 日下午消息,据电动汽车新闻网站 Electrek 报道,特斯拉正在加快部署第三代 Autopilot 自动驾驶计算机,因为当前一代产品的计算能力即将被耗尽. 201 ...

  5. [MySQL]快速解决"is marked as crashed and should be repaired"故障[转]

    Table '.\Tablename\posts' is marked as crashed and should be repaired 提示说论坛的帖子表posts被标记有问题,需要修复.我记得以 ...

  6. Linux Shell脚本编程学习笔记和实战

    http://www.1987.name/141.html shell基础 终端打印.算术运算.经常使用变量 Linux下搜索指定文件夹下特定字符串并高亮显示匹配关键词 从键盘或文件里获取标准输入 [ ...

  7. ios 将随意对象存进数据库

    要将一个对象存进数据库的blob字段,最好先转为NSData.一个对象要遵守NSCoding协议,实现协议中对应的方法,才干转成NSData. NSData *statusData = [NSKeye ...

  8. poj 2154 Color(polya计数 + 欧拉函数优化)

    http://poj.org/problem?id=2154 大致题意:由n个珠子,n种颜色,组成一个项链.要求不同的项链数目.旋转后一样的属于同一种.结果模p. n个珠子应该有n种旋转置换.每种置换 ...

  9. []HAOI2008] 硬币购物 解题报告 ( 完全背包+容斥原理)

    题目链接:https://www.luogu.org/problemnew/show/P1450 题目描述: 题解: 如果去掉限制的话,这就是一个完全背包. 我们可以考虑先去掉限制,把这个完全背包做出 ...

  10. [Project Euler 429] Sum of squares of unitary divisors(数论)

    题目链接:https://projecteuler.net/problem=429 题目: 我们称 N 的约数 d 为特殊的当且仅当 gcd(d, n / d) = 1. 设 S(n) 为 n 所有特 ...