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

题目

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

代码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;
}