sort和qsort排序
qsort(数组名,数组长度,数组中每个元素大小,compare); compare函数的写法决定了排序是升序还是降序。需要#include<stdlib.h>
例如:
int compare(const void*a,const void*b){return *(int*)a-*(int*)b;}
示例:qsort(a,10,sizeof(int),compare) //假设已定义了整型数组a[10]
升序排序的写法,如果是:return *(*int)b-*(int*)a 就是降序,不论是什么类型的数组,该函数的形式都是这样的
sort(数组名,数组末地址,compare) //若不写compare则默认升序排列,需要#include<algorithm>
例如:
sort(a,a+10); //将数组a以升序排序,假设先前定义了a[10]并输入了数据
一、对int类型数组排序
int num[100];
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
qsort(num,100,sizeof(num[0]),cmp);
二、对char类型数组排序(同int类型)
char word[100];
int cmp( const void *a , const void *b )
{
return *(char *)a - *(int *)b;
}
qsort(word,100,sizeof(word[0]),cmp);
三、对double类型数组排序
double in[100];
int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
}
qsort(in,100,sizeof(in[0]),cmp);
四、对结构体一级排序
struct Sample
{
double data;
int other;
}s[100]
//按照data的值从小到大将结构体排序
int cmp( const void *a ,const void *b)
{
return (*(Sample *)a).data > (*(Sample *)b).data ? 1 : -1;
}
qsort(s,100,sizeof(s[0]),cmp);
五、对结构体二级排序
struct Sample
{
int x;
int y;
}s[100];
//按照x从小到大排序,当x相等时按照y从大到小排序
int cmp( const void *a , const void *b )
{
struct Sample *c = (Sample *)a;
struct Sample *d = (Sample *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
}
qsort(s,100,sizeof(s[0]),cmp);
六、对字符串进行排序
struct Sample
{
int data;
char str[100];
}s[100];
//按照结构体中字符串str的字典顺序排序
int cmp ( const void *a , const void *b )
{
return strcmp( (*(Sample *)a)->str , (*(Sample *)b)->str );
}
qsort(s,100,sizeof(s[0]),cmp);
Problem Description
5 3 3 -35 92 213 -644
213 92 3请用VC/VC++提交HintHint
/* *程序的版权和版本声明部分: *Copyright(c)2014,烟台大学计算机学院学生 *All rights reserved. *作者:王振 *完成日期:博客发表日期 *版本号:v1.0 *对任务及求解方法的描述部分: *输入描述: *问题描述: *程序输出: *问题分析: *算法设计: */ /////////普通方法 #include<iostream> using namespace std; int a[1000005]; int main() { int b,i,n,m,s; while(cin>>n>>m) { while(n--) { cin>>b; b=b+500000; a[b]=1; } for(i=1000004,n=1;i>=0&&n<=m;i--) if(a[i]==1) { s=i-500000; if(m!=n) cout<<s<<' '; else cout<<s<<endl; n++; } } return 0; }
////////sort方法 #include<iostream> #include<stdlib.h> using namespace std; int a[1000001]; int compare(const void*a,const void*b) {return *(int *)a - *(int *)b;} int main() { int n,m,i,s; while(cin>>n>>m) { for(i=0;i<n;i++) cin>>a[i]; qsort(a,n,sizeof(int),compare); for(i=n-1,s=1;i>=0&&s<=m;i--) { if(s==m) cout<<a[i]<<endl; else cout<<a[i]<<' '; s++; } } return 0; }
/////////qsort #include<iostream> #include<stdlib.h> using namespace std; int a[1000001]; int compare(const void*a,const void*b) {return *(int *)a - *(int *)b;} int main() { int n,m,i; while(cin>>n>>m) { for(i=0;i<n;i++) cin>>a[i]; qsort(a,n,sizeof(int),compare); int flag=0; for(i=n-1;i>=n-m;i--) { if(!flag) { printf("%d",a[i]); flag=1; } else printf(" %d",a[i]); } printf("\n"); } return 0; }
///////以上均超时,用c语言输入输出可以 #include <iostream> #include <cstdio> #include <algorithm> using namespace std; bool cmp(int x,int y) { return x>y; } int a[1000000]; int main() { int n,k,i; while(~scanf("%d%d",&n,&k)) { for( i = 0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n,cmp); printf("%d",a[0]); for(i = 1;i<k;i++) printf(" %d",a[i]); printf("\n"); } return 0; }
前途是光明的,道路是曲折的。。。。。。。。。。。。。。