码迷,mamicode.com
首页 > 编程语言 > 详细

C/C++排序函数

时间:2014-07-18 17:39:11      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   strong   

  在应用中,如果我们不需要自己来编写排序函数的话,可以通过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;
}

运行结果:

bubuko.com,布布扣

  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函数好。

C/C++排序函数,布布扣,bubuko.com

C/C++排序函数

标签:style   blog   http   color   使用   strong   

原文地址:http://www.cnblogs.com/dzkang2011/p/sort.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!