华为机试:明明的随机数 桶排序完美解决
题目
代码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;
}