首页 > 编程语言 >计数排序(Python)

计数排序(Python)

时间:2023-08-16 15:45:29浏览次数:45  
标签:index Python value 计数 ar counts 排序 data

def counting(data):
    "data里的value作为计数数组counts的index,然后把counts的value转换成data的index"
    # 计数列表,存储每个值有多少个,以data的值作为索引,所以数组长度以最大值+1为准
    counts = [0 for i in range(max(data)+1)]  # 同时给数组赋初值0,等会逐个计数
    print(counts)

    # Finds the "counts" for each individual number
    for value in data:
        counts[value] += 1
    print(counts)    

    # Finds the cumulative sum counts
    # 对counts列表,每个index对应的值是data中value的个数,索引从0开始,已经排序过了,
    # 所以现在要把counts中每个index的value加上前面位置的个数的和,这样它的value就是data排序后的index的一个区间
    # 比如: counts[0]=5,则代表排序后data的前五个,排序后将在ar[4]、3、2、1、0的位置
    #       counts[1]=2本来,现在要加上前面的变成counts[1]=7;即2将会在排序后ar[6]和ar[5]的位置
    for index in range(1, len(counts)):
        counts[index] = counts[index-1] + counts[index]
    print(counts)

    # Sorting Phase  操作一个data中的值就将counts列表对应的删一个值,即代表索引减一
    # 比如: 一开始counts[1] = 5;则代表遇到data中第一个value为1的值时,让它排到ar[5-1]的位置,
    #       然后,counts[1] = 4;这样遇到下一个1时,它将排到ar[4-1]的位置,从右往左这样
    arr = [0 for loop in range(len(data))]
    for value in data:
        index = counts[value] - 1
        arr[index] = value
        counts[value] -= 1 

    return arr
   

data = [2, 7, 16, 20, 15, 1, 3, 10]
print(counting(data))

# 原文链接:https://coderslegacy.com/python/counting-sort-algorithm/

标签:index,Python,value,计数,ar,counts,排序,data
From: https://www.cnblogs.com/faf4r/p/17635247.html

相关文章

  • if语句条件判断大集合--------------------------------------python语言学习
    准备数据: ##实现成绩大于等于600为优秀,其他为普通等级上代码:importpandasaspddf=pd.read_excel('C:/Users/Administrator/Desktop/test1.xlsx',header=1)defscore_if(score):ifscore>=600:a="优秀"returnaelse:a="普通"......
  • MySQL8.0 JSON的对比、排序和索引
    (目录)JSON的对比和排序JSON值可以通过=,<,<=,>,>=,<>,!=,<=>操作符来进行对比JSON不支持BETWEEN,IN(),GREATEST(),LEAST(),可以通过将JSON转换为其他数据类型来使用这些操作符。JSON值的对比在两个级别上进行,先进行数据类型的对比,如果类型相同,再进行值的对比。类型可以......
  • python编程从入门到实践(第2版)学习笔记(变量,字符串)
    变量变量是一种可以赋给值的标签。每一个变量都指向一个相关联的值,下列代码中message即为变量,指向的值为“HelloPythonworld!”message="HelloPythonworld!"print(message)第二行的print()函数用于打印输出这个message变量所关联的值。且变量的值是可以修改的,p......
  • python操作SQLite数据库
    1、脚本#!/usr/local/python3.8/bin/python3#-*-coding:UTF-8-*-importsqlite3importredefdict_factory(cursor,row):#将游标获取的数据处理成字典返回#cursor.description:获取表头d={}foridx,colinenumerate(cursor.description):......
  • 冒泡排序
    #include<iostream>usingnamespacestd;intmain(){intn;cin>>n;inta[n];for(inti=0;i<n;i++){ cin>>a[i]; }for(inti=1;i<n;i++){for(intj=1;j<=n-i;j++){if(a[j-1]<a[j]){......
  • python+selenium(windows10) 安装
    1.安装python2. 安装selenium(piplist查看是否已安装)2.1 cmd窗口输入:pip(如果有内容显示,说明正常)        2.2 cmd输入指令安装selenium:pipinstallselenium==* .**.**( 也可以不指定版本)【如果安装中途断了,重新安装即可,不影响效果】 ......
  • python第七天
    一、元组(tuple)元组:元组的排列是有顺序的,可以进行切片,元组的数据不可以进行修改建议:元组在写的时候在最后加逗号(,),以区分参数数据例:tu=(111,"alex",(11,22),[(33,44)],True,22,33,44,)元组相当于对列表的二次加工元组具有2条功能count和index1、count对元组的指定数据进......
  • Python 如何自动遍历文件下所有的文件,然后再对每一个文件夹读取里面的csv文件
    Python如何自动遍历文件下所有的文件,然后再对每一个文件夹读取里面的csv文件:代码:importosimportcsv#设置要遍历的文件夹路径folder_path="your_folder_path"#遍历文件夹forroot,dirs,filesinos.walk(folder_path):#遍历当前文件夹下的所有文件for......
  • 基数排序
    博客地址:https://www.cnblogs.com/zylyehuo/#-*-coding:utf-8-*-#O(n)O(kn)#NBO(nlogn)importrandomdefpartition(li,left,right):tmp=li[left]whileleft<right:whileleft<rightandli[right]>=tmp:#从右面找比tmp小的数......
  • 利用Python隧道ip轻松构建全局爬虫网络
    嘿,爬虫程序员们!你们有没有碰到过需要大规模数据爬取的情况?也许你们之前遇到过网站的反爬措施,卡住你们的进度。别担心,今天我来分享一个利用Python隧道爬虫ip实现的方法,帮助你们轻松搭建全局爬虫ip网络,解决反爬的难题。首先,我们要明白什么是隧道爬虫ip隧道爬虫ip,顾名思义,就是在网络上......