九度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;}

原创粉丝点击