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;
}
前途是光明的,道路是曲折的。。。。。。。。。。。。。。

浙公网安备 33010602011771号