当前位置:编程学习 > C/C++ >>

九度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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,