排序-计数-优化版

计数排序优化版:引用:https://www.cnblogs.com/xiaochuan94/p/11198610.html基础版能够解决一般的情况,但是它有一个缺陷,那就是存在空间浪费的问题。比如一组数据{101,109,108,102,110,107,103},其中最大值为110,按照基础版的思路,我们需要创建一个长度为111的计数数组,但是我们可以发现,它前面的[0,100]的空间完全浪费了,那怎样优化呢?将数组长度定为max-min+1,即不仅要找出最大值,还要找出最小值,根据两者的差来确定计数数组的长度。

python算法实现:
import math

def countSort(data):
    #假设负无穷大为最小值,正无穷大为最大值
    listMin = float("inf")
    listMax = float("-inf")
    #找出数组data中的最大值、最小值
    for i in data:
        listMax = max(i,listMax)
        listMin = min(i,listMin)
    #初始化计数数组count
    countList = [0] * (listMax - listMin + 1)
    #对计数数组各元素赋值,data列表中的值,即是countList的索引,
    # 索引位置对应的值表示该数字出现的次数,countList中的元素要减去最小值,再作为新索引
    for i in data:
        countList[i-listMin] += 1
    #创建结果数组
    resultList = [0] * len(data)
    #创建结果数组的起始索引
    index = 0
    for i in range(len(countList)):
        #只统计出现次数大于0的情况,当其值大于0,说明出现了该数字
        while countList[i] > 0 :
            #i的值表示原列表中需要比较的数,再将减去的最小值补上
            resultList[index] = i + listMin
            index += 1
            #出现次数减1
            countList[i] -= 1
    return resultList

def main():
    data = list(map(int, input("请输入需要排序的列表,逗号间隔:").split(",")))
    #101,109,108,102,110,107,103
    rtn = countSort(data)
    print("计数排序结果为:", end="")
    print(rtn)

if __name__ == "__main__":
    main()
 

原文地址:https://www.cnblogs.com/an-wl/p/12631457.html

时间: 2024-08-07 02:27:00

排序-计数-优化版的相关文章

优化版的冒泡排序

;优化版的冒泡排序,最好的情况为线性阶 ,最坏的情况为平方阶 ;算法的最好情况,如一个拍好序列的数组那么做排序,那么就会有几行代码不会产生交换的情况 最坏的情况是全部都交换 ;code /* 此冒泡最好情况被优化为线性阶 最坏就是平方阶 */ void bubble(int arr[3],int n) { int bChange=1,i=0,j=0; for(i=0;i<n&&bChange==1;++i)//n次 { bChange=0; for(j=0;j<n;++j)//

POJ-2533最长上升子序列(DP+二分)(优化版)

Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 41944   Accepted: 18453 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given numeric sequence (a1, a2, ...

[ACM] POJ 2154 Color (Polya计数优化,欧拉函数)

Color Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7630   Accepted: 2507 Description Beads of N colors are connected together into a circular necklace of N beads (N<=1000000000). Your job is to calculate how many different kinds of th

flask 大型教程项目优化版(1):Hello World

Hello World 作者背景 作者是一个使用多种语言开发复杂程序并且拥有十多年经验的软件工程师.作者第一次学习 Python 是在为一个 C++ 库创建绑定的时候. 除了 Python,作者曾经用 PHP, Ruby, Smalltalk 甚至 C++ 写过 web 应用.在所有这些中,Python/Flask 组合是作者认为最为自由的一种. 应用程序简介 作为本教程的一部分–我要开发的应用程序是一个极具特色的微博服务器,我称之为 microblog . 我会随着应用程序的不断地进展将涉及到

ADSafe净网大师3.5.1.910 绿色优化版

国内首款全方位广告智能拦截软件ADSafe,今天,ADSafe净网大师更新v3.5.1.910 正式版,这次修正了长时间运行导致的问题.另外据国外博客获悉口碑不错强大的奶牛V5也再开发阶段中了! 此绿色优化版,由zd423专注持续优化,免后续强制更新,无启动赞助弹窗.无多余按钮及应用推销,干净的感觉真好!ADsafe广告管家是国内最大的广告强力过滤软件,大色块.扁平化.卡片式的操作方式,提供更好交互体验.ADsafe净网大师能过滤不良信息.逛网站无骚扰.看视频不等待,还可保护上网隐私,防止用户信

jq实现点击表格无刷新修改数据,优化版

1 <!-------------------修改密码-------------------------- > 2 $("#pwd").live("click",function(){//① 3 $(this).parents("tr").find("#a_cannel").text("取消"); 4 user=$(this).parents("tr").find("

查找质数的算法优化版

package com.my.testPrimeNumber; import java.util.ArrayList; import java.util.List; public class PrimeNumber { public boolean isPrimeNum(int n) { //第一步过滤偶数,使范围减少一半 if(n==2) { return true; } else if(n%2==0) { return false; } //处理奇数,一个素数中不会有偶数因子,但是他的平方根

【C++】String类及其优化版的实现

#include<iostream> using namespace std; class String { public: String() { _ptr = new char[1]; _ptr[0] = 0; } String(const char* str) { _ptr = new char[strlen(str)+1]; strcpy(_ptr,str); } String(const String& str) { _ptr = new char[strlen(str._pt

搜狗拼音输入法 v8.5e 去广告精简优化版

搜狗拼音输入法8.5 正式版例行更新!最新字母代号为e,详细版本号v8.5.0.1322:新版颜文字大改版,优化智能模糊音.输入统计.搜狗拼音输入法是电脑装机必备软件,版本有传统版和智慧版之分,其打字超准.词库超大.速度飞快.外观漂亮,因此使得输入操作变得事半功倍.精简的版本用着舒适! zd423.大水牛:专注精简优化,彻底免升级更新,砍掉了多余功能.无微门户弹窗.无勋章相关推荐.无推广软件渣行为,无多余干扰提示,无多余进程驻留,可选安装个人中心和联网组件,让你安心舒适的打字!删除了云候选程序.