华为机试:明明的随机数 桶排序完美解决

题目

代码1

#include <iostream>
using namespace std; 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	int n,g=0;
	cin>>n;
	int* pBuff=new int[1000];
	int b[1000];
	for(int i=0;i<n;i++){
		cin>>pBuff[i];
	}
	for(int j=0;j<n;j++){
		for(int k=0;k<n-1-j;k++){
           int temp;
		   if(pBuff[k]>pBuff[k+1]){
		   	  temp=pBuff[k];
		   	  pBuff[k]=pBuff[k+1];
		   	  pBuff[k+1]=temp;
		   }			
		}
	}
	for(int t=0;t<n;t++){
		
		if(t==0){
		b[g]=pBuff[t];
		g++;
		}
		else if(pBuff[t]==pBuff[t-1])
		{
           continue;
           /*
		   for(part1;part2;part3) 在for循环中,使用 continue 是跳到part3部分。(
		   如果,你在part3的地方做了循环变量的修改,那么,循环变量的值会改变、)
		   而while(exp); 中没有part3这一部分,所以,你在使用的时候,需要自己先
		   进行循环变量的修改。 
		   */
		}
		else{
			b[g]=pBuff[t];
			g++;
		
		}
	}
		cout<<g<<endl;
	for(int h=0;h<g;h++){
		cout<<b[h]<<" ";
	}
	return 0;
}

改进代码

#include <iostream>
using namespace std;
int a[101],N,count=0;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void radix_sort(int*a,int len,int max){
	int*b =new int[max+1];//1创建临时数组,数组大小取决于待排元素中最大元素的值。 
    for(int i=0;i<=max;i++) b[i]=-1;// 2初始化临时数组
	for(int i=0;i<len;i++)	b[a[i]]=a[i];//3 排序 
	for(int i=0;i<=max;i++) if(b[i]!=-1) count++;
	cout<<count<<endl;
	for(int i=0;i<=max;i++)  if(b[i]!=-1) cout<<b[i]<<" ";

} 
int main(int argc, char** argv) {
    cin>>N;
	for(int i=0;i<N;i++) cin>>a[i];
	radix_sort(a,N,1000);
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值