首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

9度1167 数组排序

2013-02-03 
九度1167 数组排序/********************************* *日期:2013-1-29 *作者:SJF0115 *题号: 九度1167 *

九度1167 数组排序

/********************************* *    日期: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;}

热点排行