基数排序,c++简化版本

算法思想:基数排序又称为“桶子法”,从低位开始将待排序的数按照这一位的值放到相应的编号为0~9的桶中。等到低位排完得到一个子序列,再将这个序列按照次低位的大小进入相应的桶中,一直排到最高位为止,数组排序完成。
分类
LSD——从低位向高位排
MSD——从高位向低位排
图片实力
在这里插入图片描述

#include<iostream> 
using namespace std;
int date[100],count[10],l;
//date[]保存数值  count[]记录对应基数数量  l记录最大数的长度 
void basesort(int n){
	int num = 1;
	int temp[10][n];
	for(int i = 0 ; i < l ; i++){//控制趟数
		for(int j = 0 ; j < 10 ; j++){
			count[j] = 0;
		} 
		for(int k = 0 ; k < n ; k++){ //选取对应基数 
			int f = date[k] / num % 10;
			temp[f][count[f]] = date[k];
			count[f] ++;	 
		}
		int ind = 0;
		for(int j = 0 ; j < 10 ; j++){//重新赋值 
			for(int k = 0 ; k < count[j];k++){
				date[ind++] = temp[j][k];	
			}
		}
		num = num * 10;	
	}
} 
int main(){
	int n;
	cin >> n;
	int max = -0xffff;
	for(int i = 0 ; i < n ; i++){//输入 
		cin >> date[i];
		if(date[i] > max){
			max = date[i];
		}
	}
	while(max > 0){ //求最大数长度 
		max = max /10;
		l++;
	}
	//cout << l<<endl;验证长度是否正确
	basesort(n);//调用基数排序方法 
	for(int i = 0 ; i < n ; i++){ //输出 
		cout << date[i]<<" ";
	}
	return 0;
}
/*
测试用例
6
433 5 12 3 22 345 
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值