C/C++排序函数

转载:文章转至http://www.th7.cn/Program/cp/201407/240731.shtml

在应用中,如果我们不需要自己来编写排序函数的话,可以通过C/C++中已经实现的库函数来完成排序任务。

一、sort函数

sort函数在C++中<algorithm>中,若要使用,需要加上头文件#include <algorithm>,它有如下几种形式:

(1)默认情况按升序排列:

假设数组为a[n],下标从0开始,对整个数组按升序排列:

int a[110], n; //n表示元素个数sort(a, a+n);//整个数组按升序排列

(2)若要将某个区间的元素排列,比如需要将第3到第9个元素升序排列:

sort(a+3, a+10);//3~9是7个数,注意后面那个数字为什么是10

(3)如果需要按照降序排列,那么需要写一个cmp比较函数(一般按照升序排列的话,会调用默认的cmp函数:

bool cmp(int a, int b){return b < a;//判断a与b的大小,因为降序,要b-a}

再使用sort函数:

sort(a, a+n, cmp); //降序排列,0~n-1

(4) cmp功能是很强大的,你可以按照任意的方法,任意的组织自己的数组该如何排列:

下面给个例子:对学生的成绩按降序排列:

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;struct student{	char name[20];//学生姓名	int grade;	//学生分数}ST[100];bool cmp(student a, student b)  //注意这里是bool{	return a.grade > b.grade; //判断大小,降序}int main(){	int n, gd;	char str[20];	scanf("%d", &n);	//输入学生人数	for(int i = 0; i < n; i++)	{		scanf("%s%d", str, &gd);	//输入学生姓名和成绩		strcpy(ST[i].name, str);	//存入学生结构体		ST[i].grade = gd;	}	sort(ST, ST+n, cmp);	for(int i = 0; i < n; i++)		printf("第%d名:%s%d/n", i+1, ST[i].name, ST[i].grade);	return 0;}

运行结果:

sort函数很强大,复杂度O(nlog n),有兴趣的读者还可以自行探讨更多。

二、qsort函数

qsort函数,也就是快速排序算法,在C的<stdlib>库中,需加入头文件#include <cstdlib> 或#include <stdlib.h>。

调用qsort函数需要写cmp比较函数。

给出按升序排列的例子:

int cmp(const void* a, const void* b)  //注意这里是int{return (int*)a - (int*)b;}

调用:

qsort(a, n, sizeof(int), cmp);//a为数组,n为个数

如果需要按照自己的意愿排列,那么同样重写cmp比较函数,就可以完成,和sort函数类似。时间复杂度为O(n log n),但是某些情况要比sort函数好。


  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值