基数排序【模板】

简介:

这是一个最简单的,以10为桶size的基数排序:

int maxbit(int data[], int n) //辅助函数,求数据的最大位数
{
	int d = 1; //保存最大的位数
	int p = 10;
	for(int i = 0; i < n; ++i)
	{
		while(data[i] >= p)
		{
			p *= 10;
			++d;
		}
	}
	return d;
}

void radixsort(int data[], int n) //基数排序
{
	int d = maxbit(data, n);
	int *tmp = new int[n];
	int *count = new int[10]; //计数器
	int i, j, k;
	int radix = 1;
	for(i = 1; i <= d; i++) //进行d次排序
	{
		for(j = 0; j < 10; j++)
			count[j] = 0; //init 计数器

		for(j = 0; j < n; j++)
		{
			k = (data[j] / radix) % 10; //统计每个桶中的记录数
			count[k]++;
		}

		for(j = 1; j < 10; j++)
			count[j] = count[j - 1] + count[j]; //将tmp中的位置依次分配给每个桶

		for(j = n - 1; j >= 0; j--) //将所有桶中记录依次收集到tmp中
		{
			k = (data[j] / radix) % 10;
			tmp[count[k] - 1] = data[j];
			count[k]--;
		}

		for(j = 0; j < n; j++) //将临时数组的内容复制到data中
			data[j] = tmp[j];

		radix = radix * 10;
	}
	delete[]tmp;
	delete[]count;
}




相关文章
|
6月前
|
算法
桶排序(简化版)与冒泡排序
桶排序(简化版)与冒泡排序
36 0
|
4月前
|
算法
二分 模板
二分的另一个板子
34 1
|
5月前
|
Java Python
二分查找模板
二分查找模板
|
5月前
|
算法 搜索推荐 C++
【洛谷 P1177】【模板】快速排序 题解(快速排序+数组索引)
**快速排序模板题目**,要求使用快排算法对输入的整数序列进行排序。输入包含正整数N和N个整数,输出排序后的序列。20%的数据N≤10^3,所有数据N≤10^5。代码中提供了一种实现,包括读取输入、定义partition函数划分数组、递归调用quickSort及主函数执行排序和输出。注意C++选手避免使用STL的`sort`。
25 0
|
6月前
|
Python
{二分模板}
{二分模板}
23 0
|
机器学习/深度学习
P1873 砍树(二分查找模板)
P1873 砍树(二分查找模板)
109 0
|
机器学习/深度学习 人工智能 搜索推荐
P1177 【模板】快速排序(二分排序)
P1177 【模板】快速排序(二分排序)
77 0
|
存储 搜索推荐 算法
“简单易懂的排序:深入了解直接选择排序“
“简单易懂的排序:深入了解直接选择排序“
94 0
|
编译器 C语言 C++
C++ 冒泡排序,模板
C++ 冒泡排序,模板
二分搜索的三种模板
二分搜索的三种模板
66 0