#!/usr/bin/python#coding: utf-8"""个人认为计数排序相对来说更难理解,最好花费一些时间来理解下,因为这个求解方法非常不错。该算法的时间复杂度取决于输入的数的范围(假设为k),如果输入范围大于数的数量(假设为n),则此时的时间复杂度为O(k),否则为O(n)"""# 输入数的范围假设为k,设定为1000以内的k = 1000# c数组根据输入数的范围进行初始化c = [ 0 for i in range ( k )]ranked = []def counting_sort ( li , num ):"计数排序"global k , c , ranked# 把之前统计的数量都记录到当前的c[i]中for i in range ( 1 , k ):c [ i ] += c [ i - 1 ]# 把每一个对应位置的数都存入到ranked数组中for i in range ( num - 1 , - 1 , - 1 ):# 因为是从0开始计数的,所以表示成对应位置的时候要减去1# c[li[i]] 表示的是把 li[i] 要放置的位置c [ li [ i ]] -= 1ranked [ c [ li [ i ]]] = li [ i ]if __name__ == "__main__" :li = []n = input ( "输入数的总量:" )# ranked 数组根据输入的n进行初始化ranked = [ ranked . append ( 0 ) for i in range ( n )]for i in range ( n ):li . append ( input ())# 统计每一个数输入的次数c [ li [ i ]] += 1# 进行计数排序counting_sort ( li , len ( li ))print ranked
计数排序
最新推荐文章于 2024-10-01 05:04:32 发布