C/C++ qsort()快速排序的用法
来源:互联网 发布:淘宝投诉编号在哪里看 编辑:程序博客网 时间:2024/06/05 17:13
C/C++语言函数库中有很多排序函数,今天说一下qsort()快速排序函数。源码如下:
void qsort ( void * base, size_t nmem, size_t size, int ( * comp) ( const void * , const void * ) ) ;
它根据comp所指向的函数所提供的顺序对base所指向的数组进行排序,nmem为参加排序的元素个数,size为每个元素所占的字节数。
例如要 对元素进行升序排列,则定义comp所指向的函数为:如果其第一个参数比第二个参数小,则返回一个小于0的值,反之则返回一个大于0的值,如果相等,则返 回0。
例:
# include < stdio. h> # include < stdlib. h> int comp( const void * , const void * ) ; int main( int argc, char * argv[ ] ) { int i; int array[ ] = { 6, 8, 2, 9, 1, 0} ; qsort ( array, 6, sizeof ( int ) , comp) ; for ( i = 0; i < 6; i + + ) { printf ( "%d\t" , array[ i] ) ; } printf ( "\n" ) ; return 0; } int comp( const void * p, const void * q) { return ( * ( int * ) p - * ( int * ) q) ; }首先:看一下这个函数的原型
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );compare( (void *) elem1, (void *) elem2 );void *base //被排序的项目size_t num//被排序的项目的数目size_t width//被排序单个项目所占内存int (__cdecl *compare )(const void *elem1, const void *elem2 ) //大小比较函数compare( (void *) elem1, (void *) elem2 );//函数的是返回值返回值的描述 < 0 elem1 比 elem2 小 0 elem1 等于 elem2 > 0 elem1 比 elem2 大 一、对int类型数组排序int num[100];int cmp ( const void *a , const void *b ){return *(int *)a - *(int *)b;}qsort(num,100,sizeof(num[0]),cmp);示例代码:
#include<iostream.h>#include<stdlib.h>int compare(const void *a,const void *b){return *(int *)a-*(int *)b;}void main(){int num[10]={11,35,65,25,79,54,34,66,92,30};qsort(num,10,sizeof(int),compare);for(int i=0;i<10;i++) cout<<num[i]<<endl;}二、对char类型数组排序(同int类型)char word[100];int cmp( const void *a , const void *b ){return *(char *)a - *(int *)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);//按照结构体中字符串str的字典顺序排序struct In{int data;char str[100];}s[100];int cmp ( const void *a , const void *b ){return strcmp( (*(In *)a)->str , (*(In *)b)->str );}qsort(s,100,sizeof(s[0]),cmp);六、对字符串进行排序示例代码:#include<iostream.h>#include<stdlib.h>#include<string.h>//using namespace std;int compare(const void *a,const void *b){return strcmp(*(char **)a,*(char **)b);}void main(){char *str[3]={"leebame","miyan","love"};qsort(str,4,sizeof(str[0]),compare);for(int i=0;i<3;i++) cout<<str[i]<<' ';}七、计算几何中求凸包的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; } c++中加载头文件 "iostream" c中qsort函数包含在<stdlib.h>的头文件里,strcmp包含在<string.h>的头文件里 ///////////////////////////////////////////////////sort(a.begin(),a.end())sort(p,p+N,cmp)bool cmp(const int& a,const int& b){ return a<b;//升序排列 return a>b;//降序排列}///////////////////////////////////////////////////三.qsort(a,n,sizeof(int),compare) 其中compare是指向函数的指针,应用如下: int compare(const void*b,const void*c) { return *(int*)b-*(int*)c; } 如果a为二维数组,即a[n][m],排序如下: qsort(a,n,sizeof(int)*m,compare) int compare(const void*b,const void*c) { reture ((int*)b)[0]-((int*)c)[0]; } 如果a是字符数组,排序如下; qsort(a,strlen(a),sizeof(char),cmp); int cmp(const void*b,const void*c) { return strcmp((char*)b,(char*)c); }
阅读全文
0 0
- C/C++ qsort()快速排序的用法
- C/C++ qsort()快速排序的用法
- C/C++ qsort()快速排序的用法
- C/C++ qsort()快速排序的用法
- 快速排序Qsort--C语言版
- C语言qsort快速排序
- qsort(快速排序)的用法
- 快速排序 C语言的qsort 以及 C++的 sort
- 快速排序 C语言的qsort及C++的sort
- C语言stdlib.h下的qsort<快速排序>
- c语言知识点---qsort快速排序函数的使用
- C语言下使用快速排序qsort
- C语言中用qsort()快速排序
- 二分法快速排序法 qsort C源码
- C语言中用qsort()快速排序
- C/C++ 库函数快速排序 qsort
- 快速排序 qsort c语言代码
- C/C++快速排序函数qsort
- 【Python-ML】自适应线性神经网络(Adaline)
- 12.21日学习内容
- SAP HANA常用sql备份
- 《文法俱乐部》读书笔记之形容词--LG二进制
- jQueryUI 日历
- C/C++ qsort()快速排序的用法
- 温度传感器的一些比较
- Linux 网卡配置文件,命令详细设置
- [bigdata-125] docker安装Openvpn流程以及就结果
- Android模块化(二)——模块通信和模块间服务调用
- angularjs 小经验
- 如何在文本框中添加提示信息
- better-scroll在vue项目中的使用
- AngularJs(七)--指令(三)