计数排序
2015-04-19 21:50
211 查看
def counting_sort(L, start, end): #用于计数,start表示L中最小的元素,end表示L中最大的元素 len_start_to_end = end - start + 1 c = [0 for i in range(len_start_to_end)] N = len(L) #统计每个元素出现的次数 for element in L: c[element - start] += 1 #将c[L[i]]重置为小于L[i]的元素个数 for i in range(1,len_start_to_end): c[i] = c[i] + c[i - 1] b = [0 for i in range(N)] for element in L: b[c[element - start] - 1] = element c[element - start] = c[element - start] - 1 L[:] = b[:] if __name__ == '__main__': L = [23,41,12,32,24,31,45,35,41,24,15] counting_sort(L, 12, 45) print L
时间复杂度Θ(k+n),k表示待排序元素最小值与最大值的范围,n表示元素个数。
当k非常大(远大于n)时,计数排序的效率就会下降。因此,计数排序适用于k值较小的情况。
计数排序具有稳定性(相等元素的相对位置不变)。
相关文章推荐
- Pku acm 2388 Who's in the Middle 排序算法解题报告(二)----计数排序
- 排序算法——计数排序 收藏
- 计数排序
- 复杂度为o(n)的计数排序
- 三种基于“分配”“收集”的线性排序算法---计数排序、桶排序与基数排序
- 算法入门--计数排序
- 计数排序
- 计数排序
- 三种线性排序算法 计数排序、桶排序与基数排序
- 排序2------计数排序,桶排序
- 算法与数据结构——排序(十二)计数排序
- 计数排序
- 计数排序(Counting Sort)
- [算法分析]计数排序
- 计数排序
- 计数排序(线性)
- 三种线性排序算法 计数排序、桶排序与基数排序
- 计数排序
- 计数排序(Countsort)之Java实现