博客
关于我
关于计数排序
阅读量:428 次
发布时间:2019-03-06

本文共 612 字,大约阅读时间需要 2 分钟。

做笔试题看到有一个排序算法的时间复杂度要求为O(N),当时懵了没想到,后来想到有一个叫计数排序的排序算法貌似可以达到要求

  • 记录一下实现的过程(计数排序)
def bucket_sort(array):    maxnum = max(array)    bucket = [0] * (maxnum + 1)    for i in array:        bucket[i] += 1        newarray = []    for j in range(len(bucket)):        if bucket[j] != 0:            for _ in range(bucket[j]):                newarray.append(j)    return newarrayarray = [5,6,3,2,1,65,2,0,8,0]print(bucket_sort(array))

实现的流程大概如下:

  • 由于计数排序是根据下标以及下标所处位置的值来返回最后结果,所以速度比快排还要快。
  • 所以首先要根据所给数组中最大元素的数值来创建“槽”的长度
  • 然后遍历之前的数组,数组中有几就在“槽”的第几位上+1 (如果有两个0,那么桶中的第0个元素就要+2)
  • 取出元素,循环遍历“槽”,输出“槽”下标位置元素的值(次数)的下标值(假如array[0]的值是3,那么输出三次0)

转载地址:http://qheyz.baihongyu.com/

你可能感兴趣的文章
错题重错之WYT的刷子 单调队列
查看>>
洛谷 P2403 [SDOI2010]所驼门王的宝藏 题解
查看>>
关于结构体的初始化
查看>>
洛谷 P6851 【onu】贪心
查看>>
联赛模拟测试20 B. Walk (建图)
查看>>
联赛模拟测试22 D. 简单计算
查看>>
联赛模拟测试23 D. 真相 思维题
查看>>
莫队学习笔记
查看>>
牛顿迭代学习笔记
查看>>
P3714 [BJOI2017]树的难题 点分治+线段树合并
查看>>
Scala中的空
查看>>
k8s之PV、PVC、StorageClass详解
查看>>
你真的了解Innodb存储引擎?
查看>>
FeWeb基础之JavaScript简介
查看>>
设计模式学习笔记(二十三:解释器模式)
查看>>
算法笔记_069:Floyd算法简单介绍(Java)
查看>>
Python学习笔记_05:使用Flask+MySQL实现用户登陆注册以及增删查改操作
查看>>
Deepin_使用Python+MySQL创建工作日志记录
查看>>
dpdk在虚拟机上出错处理
查看>>
Macbook 彻彻底底的卸载MySQL
查看>>