输入
多组数据。每组数据以整数 n开头(n<10),然后是n个整数
输出
对每组数据,输出三行。
第一行是整数从小倒大排序的结果
第二行是按个位数从小到大排序的结果(如果个位数相同,小的排在前面)
第三行还是整数从小倒大排序的结果
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct A {
int nouse1;
int nouse2;
int n;
};
void mysort(void*a,int n,int width,int (*pf)(const void *e1,const void *e2)){
char *p1,*p2;
char s[32];
for(int i=0;i<n-1;i++){
char *tmp;
p1=(char*)a+width*i;
tmp=p1;
for(int j=i+1;j<n;j++){
p2=(char*)a+width*j;
if(pf(tmp,p2)>0){
tmp=p2;
}
}
for(int k=0;k<width;k++){
s[k]=p1[k];
p1[k]=tmp[k];
tmp[k]=s[k];
}
}
}
int MyCompare1( const void * e1,const void * e2)
{
int * p1 = (int * ) e1;
int * p2 = (int * ) e2;
return * p1 - * p2;
}
int MyCompare2( const void * e1,const void * e2)
{
int * p1 = (int * ) e1;
int * p2 = (int * ) e2;
if( (* p1 %10) - (* p2 % 10))
return (* p1 %10) - (* p2 % 10);
else
return * p1 - * p2;
}
int MyCompare3( const void * e1,const void * e2)
{
A * p1 = (A*) e1;
A * p2 = (A*) e2;
return p1->n - p2->n;
}
int a[20];
A b[20];
int main ()
{
int n;
while(cin >> n) {
for(int i = 0;i < n; ++i) {
cin >> a[i];
b[i].n = a[i];
}
mysort(a,n,sizeof(int),MyCompare1);
for(int i = 0;i < n; ++i)
cout << a[i] << "," ;
cout << endl;
mysort(a,n,sizeof(int),MyCompare2);
for(int i = 0;i < n; ++i)
cout << a[i] << "," ;
cout << endl;
mysort(b,n,sizeof(A),MyCompare3);
for(int i = 0;i < n; ++i)
cout << b[i].n << "," ;
cout << endl;
}
return 0;
}
当然可以用数组的空间换时间,使速度更快