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

给你n个整数,请按从大到小的顺序输出其中前m大的数。
 

Input
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
 

Output
对每组测试数据按从大到小的顺序输出前m大的数。
 

Sample Input
5 3 3 -35 92 213 -644
 

Sample Output
213 92 3
Hint
Hint
请用VC/VC++提交
 
/* 
*程序的版权和版本声明部分: 
*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("
");  

			
		
		


	
	}
	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("
");  
    }  
  
    return 0;  
}  

前途是光明的,道路是曲折的。。。。。。。。。。。。。。
原文地址:https://www.cnblogs.com/oversea201405/p/3767025.html