排序算法——桶排序

  • 把数据放进若干个桶,然后在桶里用其他排序,近乎分治思想。从数值的低位到高位依次排序,有几位就排序几次。例如二位数就排两次,三位数就排三次,依次按照个十百...的顺序来排序。

第一次排序:50 12 43 23 33 15 66 98 18 89

第二次排序:12 15 18 23 33 43 50 66 89 98

代码:

cpp 复制代码
//桶排序
void bucket_sort(int* a, int len){	
	int n = 1;
	int idx;
	int k;
	int* pTemp = NULL;
	while (n<AREA){//循环 log10AREA 次
		//1 做桶  并初始化桶
		pTemp = malloc(10 * len *sizeof(int));
#if 0
		for (int i = 0; i < 10; i++){
			for (int j = 0; j < len; j++){
				pTemp[i*len + j] = -1;
			}
		}
#else
		for (int i = 0; i < 10*len; i++){
			pTemp[i] = -1;
		}
#endif
		//2 根据特性(对应位作为桶的编号)放入桶中
		for (int i = 0; i < len; i++){
			//a[i]
			idx = a[i] / n % 10;//获取到数据这一轮要看的位上的数据

			pTemp[ idx*len + i] = a[i];
		}
		//3 从桶中取出,覆盖a数组
		k = 0;
		for (int i = 0; i < 10 * len; i++){
			if (pTemp[i] != -1)
				a[k++] = pTemp[i];
		}
		//4 销毁桶
		free(pTemp);
		pTemp = NULL;
		n *= 10;
	}
}
相关推荐
夜晚回家3 分钟前
Python 零基础入门 | 输入的数字为什么不能直接算
开发语言·python
时间的拾荒人4 分钟前
Qt 事件机制全解析:从事件处理到事件过滤器
开发语言·qt·面试
-森屿安年-6 分钟前
按身高排序
c++·算法
于指尖飞舞7 分钟前
java面试题总结
java·开发语言
程序员清风24 分钟前
算法与数据结构入门:复杂度、数组与链表
数据结构·算法·链表
无定义_34 分钟前
Codeforces Round 1124 (Div. 2)
算法
山下梅子酒22535 分钟前
洛谷-入门-B2079
c语言
(Charon)1 小时前
【C++面试】vector底层原理:扩容、拷贝移动与迭代器失效
c++·面试
zhangzeyuaaa1 小时前
深入理解 Ruby 运算符:本质、分类、坑点与重载实战
开发语言·前端·ruby
一木 之林1 小时前
DeepSeek Agent 开发(一)
开发语言·前端·javascript