程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C/C++排序函數,排序函數

C/C++排序函數,排序函數

編輯:C++入門知識

C/C++排序函數,排序函數


  在應用中,如果我們不需要自己來編寫排序函數的話,可以通過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函數好。


c語言的排序函數在哪個庫文件中

樓上都沒看過吧,
在stdlib.h頭文件中。
有qsort() //快速排序
bsearch() //折半查找
使用方法我不介紹了,,
你自己看這個吧
baike.baidu.com/view/982231.htm
 

排序問題,c語言函數調用

//問題很多,第一個就是paiux 和函數重名
//還有,就是函數返回只能返回一個數啊
#include<stdio.h>
int main()
{
int paixu(int a,int b,int c);
int a,b,c,pai;
while(scanf("%d %d %d",&a,&b,&c)!=-1)
{
pai=paixu(a,b,c);
printf("%d %d %d\n",pai);
}
return 0;
}
int paixu(int a,int b,int c)
{
int pai;
if(a>b)
{pai=b; b=a; a=pai;}
if (a>c)
{pai=c; c=a; a=pai;}
if(b>c)
{
pai=b;b=c;c=pai;
}
printf("%d %d %d\n",a,b,c);
return a;
}
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved