qsort函式C語言編譯器函式館自帶的快速排序函式。qsort 的函式原型是void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*)); 是base所指數組進行排序。qsort函式包含在C 標準庫 - <stdlib.h>中。
基本介紹
- 中文名:qsort
- 外文名:qsort
- 套用:C編程
- 類型:標準庫函式
- 頭檔案:stdlib.h
- 功 能:使用快速排序例程進行排序
函式簡介
函式聲明
參數
- base-- 指向要排序的數組的第一個元素的指針。
- nitems-- 由 base 指向的數組中元素的個數。
- size-- 數組中每個元素的大小,以位元組為單位。
- compar-- 用來比較兩個元素的函式,即函式指針(回調函式)
如果compar返回值等於0(= 0),那么p1所指向元素與p2所指向元素的順序不確定;
如果compar返回值大於0(> 0),那么p1所指向元素會被排在p2所指向元素的後面。
功 能
說明
套用示例
用法說明
int comp(const void*a,const void*b){return *(int*)a-*(int*)b;}
Compare 函式的返回值 | 描述 |
---|---|
< 0 | elem1將被排在elem2前面 |
0 | elem1 等於 elem2 |
> 0 | elem1 將被排在elem2後面 |
#include<stdio.h>#include<stdlib.h>int comp(const void*a,const void*b){return *(int*)a-*(int*)b;}int main(){int i=0;int *array;int n;scanf("%d",&n);array=(int*)malloc(n*sizeof(int));for(;i<n;i++){scanf("%d",(array+i));}qsort(array,n,sizeof(int),comp);for(i=0;i<n;i++){printf("%d\t",array[i]);}return 0;}
qsort(a,1000,sizeof(int)*2,comp);int comp(const void*a,const void*b){return((int*)a)[0]-((int*)b)[0];}
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的長度
structNode{double data;int other;}s[100];int Comp(constvoid*p1,constvoid*p2){return(*(Node*)p2).data>(*(Node*)p1).data?1:-1;}qsort(s,100,sizeof(s[0]),Comp);
struct Node{int x;int y;}s[100];//按照x從小到大排序,當x相等時按y從大到小排序int Comp(const void*p1,const void*p2){struct Node*c=(Node*)p1;struct Node*d=(Node*)p2;if(c->x!=d->x)returnc->x-d->x;else return d->y-c->y;}
struct Node{int data;char str[100];}s[100];//按照結構體中字元串str的字典序排序int Comp(const void*p1,const void*p2){return strcmp((*(Node*)p1).str,(*(Node*)p2).str);}qsort(s,100,sizeof(s[0]),Comp);
int Comp(const void*p1,const void*p2)//重點Comp函式,把除了1點外的所有的點旋轉角度排序{struct point*c=(point*)p1;struct point*d=(point*)p2;if(cacl(*c,*d,p[1])<0) return1;elseif(!cacl(*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))//如果在一條直線上,則把遠的放在前面return1;elsereturn-1;}