计数排序的优化

一、计数排序
计数排序是将序列中的数值转化为数组的下标,当数字a出现一次时,就把数组中对应a下标的值加1。这些数据需要存放在额外开辟的数组空间中(我们把该数组成为统计数组),计数排序的时间复杂度为线性的,它适用于在一定范围内的整数排序,在取值范围不是很大的情况下,它的性能可以超过那些时间复杂度为O(nlogn)的排序。
当待排序的数据为95、94、91、98、99、90、99、93、91、92时,我们还以数列的最大值来决定统计数组的长度时,要创建一个长度为100的数组,那么从0-89的位置空间就都浪费了。
所以:
优化一:我们不再以输入数列的最大值+1作为统计数组的长度,而是以数列最大值-最小值+1作为数组的长度即可。同时,以最小值作为一个偏移量,用于计算整数在统计数组中的下标。
这样:95、94、91、98、99、90、99、93、91、92在统计数组中存的位置分别为:5,4,1,8,9,0,9,3,1,2

另外:当数组中多个数据相同时,为了不打乱相同数据的位置,使排序算法具有一定的稳定性,我们需要进行进一步优化。
优化二:从统计数组的第二个元素开始,每一个元素都加上前面所有元素之和,这样统计数组中的数值大小就代表了该数据在序列中所处的位置。最后输出的时候,从后向前遍历。

二、优化代码

def countSort_improve(arr=[]):
    max_value=max(

你可能感兴趣的:(排序算法,数据结构,python,排序算法)