stdlib庫中qsort函式的使用
qsort :功 能: 使用快速排序例程進行排序
用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));
各引數:1 待排序陣列首地址 2 陣列中待排序元素數量 3 各元素的佔用空間大小 4 指向函式的指標
用於確定排序的順序 排序方法有很多種, 選擇排序,氣泡排序,歸併排序,快速排序等。 快速排序比選擇排序,氣泡排序都要快。這是因為他速度很快,所以系統也在庫裡實現這個演算法,便於我們的使用。 這就是qsort。
qsort 要求提供一個 比較函式,是為了做到通用性更好一點
int a;
int b;
} ;
然後我有一個num 型別的陣列, num dddd[100]; 我想給 dddd這個陣列排序,那怎麼辦? 我想讓 a +b 最大的num元素排在陣列的最前面,那又怎麼辦? 這都可以通過定義比較函式來做到的。 比較函式的作用就是給qsort指明 元素的大小是怎麼比較的。
像這樣的比較函式 inline int MyCmp(const void* a, const void* b) 都是有兩個元素 作為引數,返回一個int 值, 如果 比較函式返回大於0,qsort就認為 a>b , 如果比較函式返回等於0 qsort就認為a 和b 這兩個元素相等,返回小於零 qsort就認為 ab),你比較函式卻返回一個 -1 (小於零的)那麼qsort認為a<本文中排序都是採用的從小到大排序>
一、對int型別陣列排序
int num[100];
Sample:
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];
Sample: int cmp( const void *a , const void *b )
{ return *(char *)a - *(char *)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 In { double data; int other; }s[100]
//按照data的值從小到大將結構體排序,關於結構體內的排序關鍵資料data的型別可以很多種,
//參考上面的例子寫
int cmp( const void *a ,const void *b)
{ return (*(In *)a).data > (*(In *)b).data ? 1 : -1; }
qsort(s,100,sizeof(s[0]),cmp);
五、對結構體二級排序
struct In { int x; int y; }s[100];
//按照x從小到大排序,當x相等時按照y從大到小排序
int cmp( const void *a , const void *b )
{
struct In *c = (In *)a; struct In *d = (In *)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 In { int data; char str[100]; }s[100];
//按照結構體中字串str的字典順序排序
int cmp ( const void *a , const void *b )
{
return strcmp( (*(In *)a)->str , (*(In *)b)->str );
}
qsort(s,100,sizeof(s[0]),cmp);
七、計算幾何中求凸包的cmp
int cmp(const void *a,const void *b)
//重點cmp函式,把除了1點外的所有點,旋轉角度排序
{
struct point *c=(point *)a;
struct point *d=(point *)b;
if( calc(*c,*d,p[1]) < 0)
return 1;
else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y))
//如果在一條直線上,則把遠的放在前面
return 1;
else return -1;
}
相關推薦
stdlib庫中qsort函式的使用
qsort :功 能: 使用快速排序例程進行排序 用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *)); 各引數:1 待排序陣列
C語言標準庫中round函式
本文轉自---http://demon.tw/programming/c-round.html C語言標準庫中有沒有round函式?答案是,可能有,也可能沒有。這取決於你使用的編譯器,更準確地說,是編輯器是否支援C99標準。 讓我們簡單回顧一下C語言標準的歷史:C的第一個標
OpenCV庫中watershed函式(分水嶺演算法)的詳細使用例程
#include <iostream> #include <opencv2\opencv.hpp> using namespace std; using namespace cv; Mat srcImage, srcImage_, maskImage; Mat maskWaterS
C++標準庫中排序函式sort的用法
(一)為什麼要用c++標準庫裡的排序函式 Sort()函式是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的氣泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似於快排的方法,時間複雜度為n*log2(n),執行效率較高! (二)c++標準庫裡的排序函式的使用方法 I)S
VS2015及VS2017組合語言呼叫C語言的stdio庫中的函式
眾所周知,VS可以用來寫組合語言,同樣的在組合語言中,我們可以呼叫C語言中的函式,前提我們需要知道呼叫的函式在哪裡。例如下面這一段程式碼:;//VS15/17 Template for Win32 Console Application.686.MODEL flat, std
【轉】關於Python查詢庫中的函式方式
首先開啟命令列輸入: python -m pydoc -p 1234ython -m pydoc表示開啟pydoc模組,這個模組就是用來檢視python文件的工具-p 1234表示在埠號1234上開啟server,這個埠號可以自行設定原文地址:https://blog.csd
對標準庫stdlib.h中二分查詢的理解
前幾天面試的時候遇到了這個問題 ,標準庫下提供的二分查詢改錯,當時沒有改出來,寫得不好,回來查了下,這個函式的原型是: /* bsearch() and qsort() are declared both here, in <stdlib.h>, and in * non-AN
Python擴充套件庫numpy中where()函式的三種用法 Python擴充套件庫numpy中where()函式的三種用法
原 Python擴充套件庫numpy中where()函式的三種用法 2018年06月25日 07:43:56 Python_小屋 閱讀數:1000
c++中cmath函式庫(學生筆記)
c++中cmath是一個重要的數學函式庫。呼叫時必須包含cmath主檔案。 #include #include 其常用函式原型: int abs(int n) 求n的絕對值 double cos/sin/tan(double x) 求x的三角函式值(x為弧度值) double exp(dou
turtle庫中的一些常用而有趣的函式
話不多說,開門見山。 turtle.circle(radius, extend, step) 1. 該函式是一個畫圓的函式 2. 第一個引數必須有,是半徑,以距畫筆的左邊radius長度為圓心,作一個半徑為radius的圓 3. 第二個引數可選,是角度(角度制)。例如當你想
C語言常用函式庫中函式
1.pow(x,y);求x的y次方; 2.strstr(str1,str2);判斷str2是否為str1的子串,若是返回首次出現的位置,若不是返回NULL; 3.strcat(char* dest, const char *src);字串剪接函式,將src接
對於STM32F4庫函式中GPIO_PinAFConfig()函式的解讀
最近在學STM32F4晶片,想用暫存器操作,在學到IO埠複用AF(Alternative Function)時,發現對於 GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPI
編寫一個函式 reverse_string(char * string)(遞迴實現) 實現:將引數字串中的字元反向排列。 要求:不能使用C函式庫中的字串操作函式。
給定字串,程式碼如下: #include <stdio.h> #include <stdlib.h> #include <assert.h> char* reverse_string(char *str) { assert(str !
C庫中重要字串自動分割函式strtok
函式strtok 原型 char * strtok ( char * str, const char * delimiters ); 功 能: 查詢由在第二個串中指定的分界符分隔開的單詞, 即源串中除去了含有分隔串中的所有字元後餘下的一段段的字串,每呼叫一次找到
C庫中重要字串函式strspn與strcspn
(1)函式strspn: size_t strspn ( const char * str1, const char * str2 ); 功 能: 在串中查詢指定字符集的子集的第一次出現,如果str1中的所有字元都在str2中出現過,那麼返回str1的長度。如果第一個字元就不在str2
如何檢視linux動態庫中包含哪些函式
1、方法1 nm *.so 2、方法2 readelf -a *.so PS:readelf Options are: -a --all Equivalent to: -h -l -S -s -r -d -V -A -I
應用PHP GD庫中影象處理函式製作驗證碼
<?php //開啟session,之後會把驗證碼存入session,然後在後端與使用者輸入的驗證碼對比 session_start(); //新建一個真彩色影象 $image=imagecreatetruecolor(100, 30); //定義白色
Python sklearn庫中決策樹tree.DecisionTreeClassifier()函式引數介紹
max_leaf_nodes:int,None 可選(預設為None) 在最優方法中使用max_leaf_nodes構建一個樹。最好的節點是在雜質相對減少。如果是None則對葉節點的數目沒有限制。如果不是None則不考慮max_depth.class_weight:dict,list of dicts,
使用objdump檢視動態庫和靜態庫中具有哪些函式
我們在 Linux 下執行一個程式,有時會無法啟動,報缺少某某庫。這時需要檢視可執行程式或者動態庫中的符號表,動態庫的依賴項, Linux 有現成的工具可用:objdump 。 objdump 是 gcc 套件中用來檢視 ELF 檔案的工具,具體詳細用法不進行介紹,此
庫檔案中getline函式的宣告已經存在
/usr/include/stdio.h:651: note: previous declaration of ‘getline’ was here #include<stdio.h> #define MAXLINE 1000 /*maxinum inpu