C/C++呼叫快排的模板
在進行C/C++程式設計的時候,C/C++的庫函式中已經提供了快速排序法的函式qsort,我們只需要呼叫它就可以了。
qsort函式在標頭檔案stdlib.h中。要使用qsort函式,就必須加#include<stdlib.h>(對C語言來說)或加入#include<cstdlib>(對C++來說)。
下面是7種快排呼叫方法(注意下面的都是從小到大排序) 注意C語言是qsort C++是sort
一、對int型別陣列排序
比較函式:(寫在main函式前面)
int comp(const void *a,const void *b){
return *(int *)a-*(int *)b;
}
在main函式裡宣告一個陣列:
int num[100];
在對陣列元素賦值後呼叫qsort函式:
qsort(num,100,sizeof(num[0]),comp);
二、對char型別陣列排序(同int型別)
比較函式:(寫在main函式前面)
int comp(const void *a,const void *b){
return *(char *)a-*(char*)b;
}
在main函式裡宣告一個陣列:
char word[100];
在對陣列元素賦值後呼叫qsort函式:
qsort(word,100,sizeof(word[0]),comp);
呼叫之後就完成了對陣列的排序。
三、對double型別陣列排序(特別要注意)
比較函式:(寫在main函式前面)
int comp(const void *a,const void *b){
return *(double *)a>*(double *)b?1:-1;
}
在main函式裡宣告一個陣列:
double num[100];
在對陣列元素賦值後呼叫qsort函式:
qsort(num,100,sizeof(num[0]),comp);
呼叫之後就完成了對陣列的排序。
四、對結構體一級排序 //另一種簡單的演算法C++的:
struct In{ int comp(In n,In m)
double data; {
int other; return n.data<m.data;//從小到大;
}s[100]; } C++呼叫 sort(s,s+100,comp);
按照data的值從小到大將結構體排序。
關於結構體內的排序關鍵資料data的型別可以很多種,參考上面的例子寫。
比較函式:
int comp(const void *a,const void *b){
return(*(In *)a).data>(*(In *)b).data?1:-1;
}
呼叫qsort:
qsort(s,100,sizeof(s[0]),comp); );
五、對結構體二級排序
struct In{
int x;
int y;
}s[100];
比較函式:(按照x從小到大排序,當x相等時按照y從大到小排序)
int comp(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:
qsort(s,100,sizeof(s[0]),comp); );
六、對字串進行排序
struct In{
int data;
char str[100];
}s[100];
比較函式:(按照結構體中字串str的字典順序排序)
int comp(const void *a,const void *b){
return strcmp((*(In *)a)->str,
(*(In *)b)->str);
}
呼叫qsort:
qsort(s,100,sizeof(s[0]),comp); );
七、計算幾何中求凸包的comp
int comp(const void *a,const void *b){
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;
}
}
注:使用vector時,qsort(num.begin(),num.sizeof(),sizeof(num[0]),comp);
稍微修改comp函式,可以按增序排列
相關文章
- C++——模板C++
- c++ 模板類C++
- c++模板類C++
- C#呼叫 C++的DLLC#C++
- c與c++的相互呼叫C++
- C++呼叫C介面C++
- C++模板沉思錄C++
- c++函式模板C++函式
- C++ 模板與STLC++
- C++中的模板(templates) (轉)C++
- C++模板的定製二:定製C++類 (轉)C++
- C#呼叫c++編寫的dllC#C++
- C — 快排函式 qsort 的用法函式
- C++呼叫CMD命令C++
- C++模板沉思錄(上)C++
- C++開發:template,模板C++
- C++模板類複習C++
- c/c++ 模板 型別推斷C++型別
- SPFA演算法模板(C/C++)演算法C++
- Python呼叫C/C++方式PythonC++
- Linux C/C++呼叫mongDBLinuxC++
- C/C++呼叫Windows DOS命令C++Windows
- C++模板的定製三:部分定製C++類 (轉)C++
- C++模板超程式設計(C++ template metaprogramming)C++程式設計
- C++呼叫C#的動態庫dllC++C#
- C++中函式呼叫的用法C++函式
- C++模板的定製一:定製函式模板 (轉)C++函式
- C++呼叫Lua API介面C++API
- 模板方法模式(c++實現)模式C++
- C++程式設計模板2C++程式設計
- C++模板超程式設計C++程式設計
- c++ 模板之 抽象工廠C++抽象
- C++標準模板庫------容器C++
- C++的Stack模板的簡單實現C++
- 【混合程式設計】C/C++呼叫Fortran的DLL程式設計C++
- C#呼叫Couchbase中的Memcached快取C#快取
- Windows 下 c++ 呼叫 Rust 庫的例子WindowsC++Rust
- python和c++的相互呼叫教程PythonC++