1. 程式人生 > >sort()函式與qsort()函式及其標頭檔案

sort()函式與qsort()函式及其標頭檔案

今天在看程式時,遇見了sort()這個函式,我在網頁上搜了一些資料,整合一下
sort()函式是C++中的排序函式其標頭檔案為:#include<algorithm>標頭檔案;qsort()是C中的排序函式,其標頭檔案為:#include<stdlib.h>
先說一下qsort()吧,搜尋到的資料容易懂一些。
六類qsort排序方法
qsort函式很好用,但有時不太會用比如按結構體一級排序、二級排序、字串排序等。
函式原型:void qsort(void *base,size_t nelem,size_t width,int (*fcmp)(const void*,const void *))
輸入引數:
base 待排序的陣列,nelem 陣列元數的個數(長度),width 每一個元素所佔儲存空間的大小,fcmp 用於對陣列元素進行比較的函式的指標(該函式是要自己寫的),返回值為1或-1(p1>p2則返回-1,p1<p2則返回1,p1==p2則返回0),size_t是int
輸出引數:base 以升序排列 
以下是其具體分類及用法(若無具體說明是以降序排列):
1、對一維陣列排序:
(Element_type 是一位陣列中存放的資料型別,可以是char,int,float,double,ect)
int comp(const void *p1,const void *p2)
{
        return  *((Element_type*)p2)>*((Element_type*)p1)?1:-1;
}
int main()
{
        Element_type list[MAX];
        initial(list);//這是對陣列list[max]初始化
        qsort(list, sizeof(list),sizeof(Element_type),Comp);//呼叫函式qsort
        return 0;
}
2、對字串排序:
int Comp(const void *p1,const void *p2)
{
        return strcmp((char *)p2,(char *)p1);
}
int main()
{
        char a[MAX1][MAX2];
        initial(a);
        qsort(a,lenth,sizeof(a[0]),Comp);
        //lenth 為陣列a的長度
3、按結構體中某個關鍵字排序(對結構體一級排序):
struct Node
{
        double data;
        int other;
}s[100];
int Comp(const void *p1,const void *p2)
{
        return (*(Node *)p2)->data > (*(Node *)p1)->data ? 1 : -1;
}
qsort(s,100,sizeof(s[0]),Comp);
4、按結構體中多個關鍵字排序(對結構體多級排序)[以二級為例]:
struct Node
{
        int x;
        int y;
}s[100];
//按照x從小到大排序,當x相等時按y從大到小排序(這是3跟4的區別)
int Comp(const void *p1,const void *p2)
{
        struct Node *c=(Node *)p1;
        struct Node *d=(Node *)p2;
        if(c->x!=d->x)

相關推薦

sort()函式qsort()函式及其檔案

今天在看程式時,遇見了sort()這個函式,我在網頁上搜了一些資料,整合一下 sort()函式是C++中的排序函式其標頭檔案為:#include<algorithm>標頭檔案;qsort()是C中的排序函式,其標頭檔案為:#include<stdlib.h> 先說一下qsort()吧

c++模板類的成員函式的宣告定義應該放在檔案

    今天嘗試自己實現vector資料結構底層,在定義vector模板類的時候,還想像往常一樣把類分為.h檔案和.cpp檔案,把成員函式的宣告放在.h檔案中,把具體實現放在.cpp檔案中,結果在測試時發現在編譯過程中報錯。除錯了很久,重視提示“無法解析的外部符號”,如圖所示

檔案管理 使用#ifndef防止多重包含 部分標檔案用途及其中的函式介紹

       1、 在同一個檔案中只能將同一個標頭檔案包含一次。記住這個規則很容易,但很可能在不知情的情況下將標頭檔案包含多次。例如,可能使用包含了另一個頭檔案的標頭檔案。有一種標準的C++技術可以避免多次包含同一個標頭檔案。它是基於前處理器編譯指令#ifnd

NSIS文字及字串函式檔案介紹

轉自 http://hi.csdn.net/jinglidong 文字函式,顧名思義就是處理字串的函式。使用這些字串函式前,必須先包含標頭檔案WordFunc.nsh。該標頭檔案目前包含如下一些函式:WordFind、WordFind2X、WordFind3X、WordRe

檔案中的sort函式排序

注意:如果是用VC 6.0,不要改字尾為.c檔案,只有在.cpp的情況下可以呼叫此標頭檔案。 如果是DEV C++編譯器,直接Ctrl+N快捷方式建立即可。 其他編譯器我本人還不瞭解,不做贅述。 #i

對linux下程式設計中用到的檔案的一些定義及函式進行解譯(本人使用過程中用到過的不明白的定義及函式

1、typedef unsigned long int pthread_t; 型別定義: typedef unsigned long int pthread_t; //come from /usr/include/bits/pthreadtypes.h 用途:pthread_t用於宣

排序函式檔案

程式設計中排序函式可以自己寫,也可以呼叫標頭檔案中的庫函式。 c程式設計中如果需要使用排序函式,需要呼叫<stdlib.h>標頭檔案。排序函式是qsort,也就是快速排序。具體函式語法如下: #include<stdio.h> #include<stdlib

C語言檔案stdlib.h裡面有什麼函式

主要含有的內容方向: A.字串轉換 B. 隨機數 C.記憶體管理 D.與環境的介面 E.查詢與排序 F.整數運算 G.多位元組字元 … 友情連結: (1)關於 stdio.h 和 stdlib.h 包含的函式 https://blogG…csdn.net/weixin_42513339/

為什麼inline函式應該在檔案中定義?【轉】

(轉自:https://blog.csdn.net/ronnie_hu/article/details/62238311) inline函式(即行內函數)對編譯器而言必須是可見的,以便能夠在呼叫點展開該函式,與非inline函式不同的是,inline函式必須在呼叫該函式的每個檔案中定義。當然,對

常用檔案的可呼叫函式的歸類筆記

1. #include <iostream.h> 在c++中,一般#include < iostream.h > 和 using namespace std一起出現(#include < iostream >一樣的,編譯器不同的緣故,接下來就按照我

C++檔案algorithm的reverse函式

reverse(beg,end) reverse()會將區間[beg,end)內的元素全部逆序;  #include<stdio.h> #include<iostream> #include<algorithm> using namespac

C通過檔案連結子函式

main.c #include <stdio.h> #include "other.h" int main (void) { printf("%d\n", getfavoritenumber()); return 0; } other.h Cod

C++中佇列(檔案queue)常用函式

使用該標頭檔案: #include <queue> push(): 佇列中是先進先出,push即在隊尾插入一個元素。 pop(): 將佇列中最靠前位置的元素拿掉,是沒有返回值的void函式。 size(): 返回佇列中元素的個數,返回值型別為unsigne

C++ 檔案裡的:isalpha、islower、isupper、isalnum、isblank、isspace函式

1.isalpha isalpha()用來判斷一個字元是否為字母,如果是字元則返回非零,否則返回零。 cout << isalpha('a');//返回非零 cout << isalpha('2');//返回0 2.isalnum isal

(轉載)C語言中常用的幾個檔案及庫函式 (stdio.h ,string.h ,math.h ,stdlib.h)

不完全統計,C語言標準庫中的標頭檔案有15個之多,所以我主要介紹常用的這四個標頭檔案stdio.h ,string.h ,math.h ,stdlib.h ,以後用到其他的再做補充。下面上乾貨: 1.<stdio.h>:定義了輸入輸出函式、型別以及巨集,函式

檔案中能否進行函式的定義

通常我們使用標頭檔案時都是在標頭檔案中進行宣告,在原始檔中定義,哪我們能否在標頭檔案中進行函式的定義 我們先進行一個測試,先宣告一個test.h和一個test.cpp檔案,並且在test.h中定義一個函式和一個變數 可以發現,程式執行沒有問題,結果也正確

codeblock無法編譯,提示函式沒有定義,但是函式已經 在檔案中定義了

你在新增檔案時沒有選中Targets。預設情況下,一個工程會有兩個Targets,一個叫Debug,一個叫Release,前者可以除錯,用於開發。後者不能除錯,用於生成最終釋出的軟體。CodeBloc

檔案中寫類的實現出現函式重複定義的問題

先來做一個實驗,你在一個頭檔案中定義一個類,然後把內中的一個函式的實現寫在這個標頭檔案當中。 //A_test.h #ifndefine _A_TEST_ #define _A_TEST_ class A { void test(); }; void A::test() {

python sort() sorted() argsort()函式的區別

1、python的內建排序函式有 sort、sorted兩個sort函式只定義在list中,sorted函式對於所有的可迭代序列都可以定義.for example:ls = list([5, 2, 3, 1, 4])new_ls = sorted(ls)/*或者使用ls.sort()即可,直接將ls改變*/p

C語言字串檔案string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函式

前言 本博文內容基於VC6.0++, 2.本博文主要介紹包含在string.h中的幾個字串相關的函式; strlen(字串陣列名) 字串有效長度函式; 返回值:整型 功能:用來測量一個字串的有效長度(所謂有效,就是從字串中的第一個字元開始,一