算法之排序 排序第六篇 计数排序(count sort)
2014-01-13 23:28
302 查看
计数排序(count sort)
时间复杂度O(n)
空间复杂度O(max+n)max为要排序的数据中的最大值。
举个例子说明思路吧,感觉很牛叉,一会你看程序结果就知道了,比那比较排序快多了。
源数据,如下
利用辅助空间数组,记录每个元素的个数
利用元素的个数统计出每个元素在排好序的数据中的位置。
预处理以后如下
源数据每个元素从后往前处理,把其放在应该放的位置。
1
2
3
4
5
6
7
8
ok,over.
#include <iostream> #include <Windows.h> #include <ctime> using namespace std ; // count sort int * Count_sort(int *data,const int length); int const size = 1000000 ; int main( ) { DWORD s,e; int * data = new int[size]; int * result; for(int i = 0; i<size; i++) { data[i] = rand(); } s = GetTickCount(); result = Count_sort(data,size); e = GetTickCount(); //for(int i = 0; i<size; i++) //{ // cout<<data[i]<<" "; //} //cout<<endl; //for(int i = 0; i<size; i++) //{ // cout<<result[i]<<endl; //} cout<<"Count_sort cost "<<e-s<<" 毫秒"<<endl; system("pause"); return 0; } // Count_sort int * Count_sort(int *data,const int length) { if(data != NULL && length > 0) { int Max = data[0]; for(int i = 0;i<length;i++) if(data[i]>Max) Max = data[i]; int * Hash = new int[Max+1]; int * result = new int[length]; for(int i=0; i <= Max; i++) { Hash[i] = 0; } for(int i=0;i < length;i++) { Hash[data[i]]++; } for(int i = 0; i < Max; i++) { Hash[i+1] = Hash[i] + Hash[i+1]; } for(int i = length-1;i >= 0;i--) { result[ Hash[ data[i] ] -1] = data[i] ; Hash[ data[i] ] = Hash[ data[i] ] - 1 ; } return result ; } else { cout<<"exception of input Count_sort"<<endl; return NULL; } }
相关文章推荐
- 基于非比較的排序:计数排序(countSort),桶排序(bucketSort),基数排序(radixSort)
- 基于非比较的排序:计数排序(countSort),桶排序(bucketSort),基数排序(radixSort)
- 算法笔记:(一)插入排序:直接插入排序(Straight Insertion Sort)
- 实战c++中的vector系列--使用sort算法对vector进行排序(对vector<string>排序、使用稳定的排序std::stable_sort())
- 【LeetCode-面试算法经典-Java实现】【075-Sort Colors (颜色排序)】
- 地精排序(Gnome Sort) 算法
- 【算法导论-学习笔记】以线性时间增长的排序——计数排序
- STL 排序算法之全排列sort和next_permutation
- java实现选择排序算法,sort
- 【C#】洗牌算法、利用delegate自定义list的sort排序方法、summary注释
- Beaver's Calculator(蓝桥杯 算法训练)sort排序
- 关于利用STL中的sort算法对向量等容器进行排序的问题
- STL_算法_对所有元素排序(sort、stable_sort)
- 【LeetCode-面试算法经典-Java实现】【075-Sort Colors (颜色排序)】
- <菜鸟学算法-A排序(计数排序)>
- 【慢慢学算法】:最小年龄的3个职工(sort对结构体的多级排序)
- 【牛客网】直通bat-面试算法精品课_第2章 排序 2.10 计数排序练习题(JAVA版)
- 数据结构与算法——线性时间排序(计数排序、基数排序、桶排序)
- 算法导论8.3基数排序底层计数排序
- 【DS】排序算法之插入排序(Insertion Sort)