九度1167 数组排序
来源:互联网 发布:期货程序化模型源码 编辑:程序博客网 时间:2024/05/21 11:31
/********************************* * 日期:2013-1-29 * 作者:SJF0115 * 题号: 九度1167 * 题目:数组排序 * 来源:http://ac.jobdu.com/problem.php?pid=1167 * 结果:AC * 题意: * 总结:**********************************/#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct Data{int number;//数据int beforeOrder; //排序前序号int afterOrder;//排序后序号}Data;//排序函数 int cmp(const void *a,const void *b) { struct Data *c=(Data*)a; struct Data *d=(Data*)b; return c->number - d->number; }int cmp2(const void *a,const void *b) { struct Data *c=(Data*)a; struct Data *d=(Data*)b; return c->beforeOrder - d->beforeOrder; } int main(){int n,i;//freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);while(scanf("%d",&n)!=EOF){Data data[10001];//输入数据for(i = 0;i < n;i++){scanf("%d",&data[i].number);data[i].beforeOrder = i;data[i].afterOrder = 1;}//按数据大小排序qsort(data,n,sizeof(data[0]),cmp);//计算排序后的序号for(i = 0;i < n-1;i++){if(data[i].number == data[i+1].number){data[i+1].afterOrder = data[i].afterOrder;}else if(data[i].number < data[i+1].number){data[i+1].afterOrder = data[i].afterOrder + 1;}}//按排序前序号排序qsort(data,n,sizeof(data[0]),cmp2);//按排序前序号输出数据for(i = 0;i < n;i++){printf("%d",data[i].afterOrder);if(i == n-1){printf("\n");}else{printf(" ");}}}return 0;}