基数间接排序的简单实现
2012-12-24 18:05
246 查看
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <queue> #include <algorithm> #include <vector> #include <cstring> #include <stack> #include <cctype> #include <utility> #include <map> #include <string> #include <climits> #include <set> #include <string> #include <sstream> #include <utility> #include <ctime> using std::priority_queue; using std::vector; using std::swap; using std::stack; using std::sort; using std::max; using std::min; using std::pair; using std::map; using std::string; using std::cin; using std::cout; using std::set; using std::queue; using std::string; using std::istringstream; using std::make_pair; using std::greater; const int BASE(10); const int MAXN(110); int arr[MAXN]; int bucket[2][BASE][MAXN]; int count[2][BASE]; int k_pos(int num, int k) { while(k) { num /= BASE; --k; } return num%BASE; } int main() { int n; while(~scanf("%d", &n)) { int mx = -1; for(int i = 1; i <= n; ++i) { scanf("%d", arr+i); mx = max(mx, arr[i]); } int num = 0; while(mx) { ++num; mx /= BASE; } int cur = 0, last = 1; memset(count[last], 0, sizeof(count[last])); for(int i = 1; i <= n; ++i) { int temp = k_pos(arr[i], 0); bucket[last][temp][++count[last][temp]] = i; } for(int i = 1; i < num; ++i) { memset(count[cur], 0, sizeof(count[cur])); for(int j = 0; j < BASE; ++j) for(int k = 1; k <= count[last][j]; ++k) { int temp = k_pos(arr[bucket[last][j][k]], i); bucket[cur][temp][++count[cur][temp]] = bucket[last][j][k]; } cur ^= 1; last ^= 1; } for(int i = 0; i < BASE; ++i) for(int j = 1; j <= count[last][i]; ++j) printf("%d ", arr[bucket[last][i][j]]); printf("\n"); } return 0; }
相关文章推荐
- 基数排序的简单实现
- 简单排序Java实现(二):归并排序,快速排序
- Java List 实现排序的简单方法
- 冒泡排序,简单插入排序,快速排序,二分查找的JAVA实现
- jQuery实现的简单排序功能示例【冒泡排序】
- 实现一个简单的 成绩排序(两种方法)
- Java实现排序(快速排序、冒泡排序、选择排序、基数排序、插入排序)
- Go实现map元素的间接排序操作
- 史上最简单!冒泡、选择排序的Python实现及算法优化详解
- C#实现简单的冒泡、选择排序以及二分查找法
- 基数排序 原始java实现 时间复杂度O(n)
- Java实现对三个数字的排序----简单易懂
- 用链表队列实现基数排序;
- java实现简单二叉树排序
- 查找""排序""简单数学计算" "简单算法"[Java实现](数据结构和算法)(复习)(持续更新
- VC++实现选择排序算法简单示例
- 使用sort函数实现简单排序
- 排序-冒泡排序简单实现
- 八大排序算法的python实现(八)简单选择排序
- 【Python】简单例题tuple和list的转换;实现删除一个list里重复的元素;对list a进行排序,并且从最后一个开始删除重复元素