算法导论程序15-计数排序(Python)
来源:互联网 发布:加群软件 编辑:程序博客网 时间:2024/05/29 07:10
计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。
计数排序的基本思想是:对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放到它在输出数组中的位置上了,例如,如果有17个元素小于x,则x就应该
在第18个输出位置上,当有几个元素相同时,这一方案要略做修改。因为不能把它们放在同一个输出位置上。
假设输入是一个数组A[0...n-1],A.length=n,我们还需要两个数组,B[0...n-1]存放排序的输出,C[0...k]提供临时存储空间。
def counting_sort(A,B,k): n=len(A) C=[] for i in range(0,k+1): C.append(0) for j in range(0,n): C[A[j]]=C[A[j]]+1 for i in range(1,k+1): C[i]=C[i]+C[i-1] for j in range(n-1,-1,-1): B[C[A[j]]-1]=A[j] C[A[j]]=C[A[j]]-1
运行结果:
>>> A=[2,5,3,0,2,3,0,3]>>> B=[0,0,0,0,0,0,0,0]>>> k=5>>> counting_sort(A,B,k)>>> A[2, 5, 3, 0, 2, 3, 0, 3]>>> B[0, 0, 2, 2, 3, 3, 3, 5]
第二个for循环后,C中存放的是等于i的元素的个数。
第三个for循环后,C中存放的是小于或者等于i元素的总数。
第四个for循环,可以把每个元素A[j]放到它在输出数组B中的正确位置上。如果所有n个元素都是互异的,那么当第一次执行第四个for循环时,对每一个A[j]值来说,C[A[j]]-1就是A[j]在输出数组中的最终正确的位置。我们每将一个A[j]放入数组B中以后,都要将C[A[j]]的值减一。这样,当遇到下一个值等于A[j]的输入元素(如果存在)时,该元素可以直接被放到输出数组中A[j]的前一个位置上。
阅读全文
0 0
- 算法导论程序15-计数排序(Python)
- 算法导论计数排序python实现
- 算法导论 计数排序
- 【算法导论】计数排序
- 【算法导论】计数排序
- 算法导论 计数排序
- 计数排序----算法导论
- 算法导论 计数排序
- [算法导论]计数排序
- 计数排序 (算法导论 p98)
- 算法导论计数排序实现(C++)
- 算法导论第八章(计数排序)
- 算法导论程序11--堆排序算法(Python)
- 算法导论P99 计数排序
- 算法导论之计数排序
- 算法导论之计数排序
- 算法导论—计数排序
- 算法导论-8.1计数排序
- powerdesigner使用总结
- Spring基础学习教程(IOC注入方式总结)-05
- C#写好的类库dll怎么在别人调用的时候也能看到注释?
- CNoTrackObject* CThreadLocalObject::GetData( CNoTrackObject* (AFXAPI* pfnCreateObject)())
- 汇编语言: 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,
- 算法导论程序15-计数排序(Python)
- 32.七-fixtures
- 由NEFU 519引发的思考(关于逆元)
- java分布式服务框架Dubbo的介绍与使用
- 视频算法符号,视频算术符号,视频标准缩写,各种视频知识
- 03 OrangePi 内核编译
- 汇编语言: 从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,
- Mac中Android Studio的SVN使用详解
- java代码规范