计数算法排序实现
2021/7/13 20:09:34
本文主要是介绍计数算法排序实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
计数排序的核心思想是:
1 以待排序的数作为count序列的下标,以该下标出现的次数作为值。
2 线性的检测count序列的不为0的项,将此项的值 放在result序列的当前index下标项中,count序列中该计数减一。
代码实现如下:
int GetMaxValue(int* array,int length) { int maxValue = array[0]; for(int i =1;i < length;i++) { if(maxValue < array[i]) { maxValue = array[i]; } } return maxValue; } int GetMinValue(int* array,int length) { int minValue = array[0]; for(int i =1;i < length;i++) { if(minValue > array[i]) { minValue = array[i]; } } return minValue; } void CountSoft(int* array,int length) { int maxValue = GetMaxValue(array,length); int minValue = GetMinValue(array,length); int* count = new int[maxValue + 1]; memset(count,0,sizeof(int) * (maxValue + 1)); for(int i = 0;i < length;i++) { //计数 ++count[array[i]]; } int index = 0; for(int i = minValue;i < maxValue + 1;i++) { for (int j = count[i];j > 0;j--) { array[index++] = i; } } delete[] count; } int main() { int array[] = {12,31,1,21,11,3,89,56,14,89,10}; int length = sizeof(array) / sizeof(array[0]); CountSoft(array,length); std::for_each(array,array+length,[](int i){ std:: cout << i << " "; }); std::cout << std::endl; cout << "test\n"; return 0; }
计数排序使用了一个技巧 就是利用 count 以array[i] 做下标,这样就造成了自然有序。
计数排序的时间复杂度为:O(n+k) n为数组的长度,k为数组的范围大小 k = maxValue - minValue
计数排序的时间复杂度主要取决于 k(范围),范围越大,排序效率越低。
计数排序适合于范围幅度较小的序列排序。
这篇关于计数算法排序实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16ShardingSphere 如何完美驾驭分布式事务与 XA 协议?
- 2024-11-16ShardingSphere如何轻松驾驭Seata柔性分布式事务?
- 2024-11-16Maven资料入门指南
- 2024-11-16Maven资料入门教程
- 2024-11-16MyBatis Plus资料:新手入门教程与实践指南
- 2024-11-16MyBatis-Plus资料入门教程:快速上手指南
- 2024-11-16Mybatis资料入门教程:新手必看指南
- 2024-11-16MyBatis资料详解:新手入门与初级实战指南
- 2024-11-16MyBatisPlus资料:初学者入门指南与实用教程
- 2024-11-16MybatisPlus资料详解:初学者入门指南