九度1167 数组排序
[cpp]
/*********************************
* 日期:2013-1-29
* 作者:SJF0115
* 题号: 九度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;
}
/*********************************
* 日期:2013-1-29
* 作者:SJF0115
* 题号: 九度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;
}www.zzzyk.com
}
//按排序前序号排序
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;
}
补充:软件开发 , C++ ,