python 实现桶排序

news/2025/3/15 5:06:22/

前言

桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间( Θ ( n ) {\displaystyle \Theta (n)} {\displaystyle \Theta (n)}(大O符号))。但桶排序并不是比较排序,他不受到 O ( n log ⁡ n ) {\displaystyle O(n\log n)} {\displaystyle O(n\log n)}下限的影响。

桶排序以下列程序进行:

  • 设置一个定量的数组当作空桶子。
  • 寻访序列,并且把项目一个一个放到对应的桶子去。
  • 对每个不是空的桶子进行排序。
  • 从不是空的桶子里把项目再放回原来的序列中。

代码实现

# coding:utf-8# !/usr/bin/env python# Time: 2018/8/9 9:31# Author: sty# File: bucket_sort.pydef bucket_sort(array, n):# 1.创建n个空桶new_list = [[] for _ in range(n)]# 2.把arr[i] 插入到bucket[n*array[i]]for data in array:index = int(data * n)new_list[index].append(data)# 3.桶内排序for i in range(n):new_list[i].sort()# 4.产生新的排序后的列表index = 0for i in range(n):for j in range(len(new_list[i])):array[index] = new_list[i][j]index += 1return arraydef main():array = [0.897, 0.565, 0.656, 0.1234, 0.665, 0.3434]n = len(array)array = bucket_sort(array, n)print(array)if __name__ == '__main__':main()

参考链接

https://www.geeksforgeeks.org/bucket-sort-2/


http://www.ppmy.cn/news/603910.html

相关文章

c语言从stdin读入

代码 #include<stdio.h> #include<stdlib.h>int main(int argc, char* argv[]) {char * line NULL;size_t len 0;ssize_t read_len;while ((read_lengetline(&line, &len, stdin)) ! -1) { if (read_len > 0 && line[read_len-1] \n){ …

go坑合集

//创建结构体 type cat struct {Name stringAge intColor stringMark [2]intMmap map[string]string } //实例 func main(){var cat1 catcat1.Color "yellow"cat1.Age 2cat1.Name "123"//对map、切片等引用类型需要先makecat1.Mmap make(map[string]st…

c语言使用指定字符串替换特定的子串

前言 当前程序是在linux环境下执行的 代码 #include<stdio.h> #include<stdlib.h> #include<string.h>#define MAX_UTF8_RES_LEN 1024int replace_all(char* str, size_t strLen, const char* d, const char* s) {char* pos 0;char* prv 0;char temp[MA…

2019秋招面试常考题目

自然语言处理 tf-idf的公式编辑距离的代码和思想新词发现的公式和原理 EMI(w)∑j0n[log(nw/N∏i1t(nwi−nwsf)/N)]EMI(w)\sum_{j0}^{n}\left [ log(\frac{ n_{w}/N }{\prod_{i1}^{t}( n_{w_{i}} - n_{w} s_f ) / N}) \right ]EMI(w)∑j0n​[log(∏i1t​(nwi​​−nw​sf​)/N…

使用python建立简单的树机构

代码 import sysclass TreeNode:def __init__(self, x):self.val xself.left Noneself.right Noneclass Solution:def preorderTraversal(self, root):""":type root: TreeNode:rtype: List[int]"""ret []stack [root]while stack:node s…

python内置库之学习ctypes库(一)

ctypes库踩坑日记11.引言&#xff08;这里是讲的windows下调用的方式&#xff09;2.结构体3.联合体(共用体)和上面结构体用法类似,只不过这里继承的是Union类4.进阶用法5.接受返回的值6.数据类型1.引言&#xff08;这里是讲的windows下调用的方式&#xff09; 直接上代码 代码…

由动态规划计算编辑距离引发的思考

简单介绍 编辑距离算法&#xff1a; https://www.cnblogs.com/BlackStorm/p/5400809.html https://wizardforcel.gitbooks.io/the-art-of-programming-by-july/content/05.02.html https://www.dreamxu.com/books/dsa/dp/edit-distance.html 详细 c语言实现 #include <…

前端Vue学习之路(一)-初识Vue

Vue学习之路 &#xff08;一&#xff09;1.引言2.更换npm国内镜像源3.用npm下载Vue4.Vue全家桶5.使用命令创建项目5.推荐插件6.推荐网站7.学习扩展1.引言 先安装node.js环境,方便用里面的npm &#xff0c;默认安装就行,安装之后可以在cmd命令黑窗输出 npm -V查看是否存在,顺便…