qsort用法举例,qsort

  qsort用法举例,qsort

  Qsort()应该只是使用的快速行。好像是以数据块的形式移动数据,速度更快。

  原型:

  _CRTIMP void __cdecl qsort (void*,size_t,size_t,int (*)(const void*,const void *));

  解释:qsort(数组名,元素数,元素大小,比较函数)

  比较函数是遵循int com(const void *a,const void *b)格式的自写函数。

  当A-B关系为=,则分别返回0的正值和负值(反之亦然)。

  使用b时,应强制转换类型。在响应中的类型从void *转换后,应该执行该操作。

  数组下标从零开始,数字为n,下标为0-(n-1)。

  示例:

  int nn[100],n=100

  int com(const void *a,const void *b)

  {

  return *(int *)a-*(int *)b;

  }

  qsort((void *)nn,n,sizeof(int),com);

  相关:

  为什么一定要给出元素个数?(因为数组不知道它有多少个元素)为什么一定要给double的大小?(因为qsort不知道它要排序的单位是doubles。)为什么非要写那个难看的函数来比较doubles的值呢?(因为qsort需要一个指向函数的指针,因为它不知道要排序的元素的类型。)为什么qsort使用的比较函数接受const void* argument而不是char* argument?(因为qsort可以对不是字符串的值进行排序)比雅尼斯特劳斯特鲁普

  首先,对int数组进行排序

  int num[100];

  样本:

  int cmp(常量void *a,常量void *b)

  {

  return *(int *)a-*(int *)b;

  }

  qsort(num,100,sizeof(num[0]),CMP);

  其次,对char类型的数组进行排序(与int类型相同)

  char word[100];

  样本:

  int cmp(常量void *a,常量void *b)

  {

  return *(char *)a-*(int *)b;

  }

  qsort(word,100,sizeof(word[0]),CMP);

  第三,对双数组进行排序(要特别注意)

  double in[100];

  int cmp(常量void *a,常量void *b)

  {

  return *(double *)a *(double *)b?1 : -1;

  }

  qsort(in,100,sizeof(in[0]),CMP);

  第四,将结构排在第一级。

  结构输入

  {

  双数据;

  int other

  }s[100]

  //按照数据的值从小到大排序结构。结构中有多种类型的排序关键字数据。请参考上面的例子来写。

  int cmp(常量void *a,常量void *b)

  {

  return(*(In *)a)-data(*(In *)b)-data?1 : -1;

  }

  qsort(s,100,sizeof(s[0]),CMP);

  第五,结构的二阶。

  结构输入

  {

  int x;

  int y;

  } s[100];

  //按x从小到大排序,当x相等时按y从大到小排序

  int cmp(常量void *a,常量void *b)

  {

  *c中的结构=(In *)a;

  结构In * d=(In *)b;

  如果(c- x!=d- x)返回c- x - d-

  否则返回d- y - c-

  }

  qsort(s,100,sizeof(s[0]),CMP);

  第六,对字符串进行排序。

  结构输入

  {

  int数据;

  字符串[100];

  } s[100];

  //根据字符串str在结构中的字典顺序排序

  int cmp(常量void *a,常量void *b)

  {

  返回strcmp( (*(In *)a)- str,(*(In *)b)-str);

  }

  qsort(s,100,sizeof(s[0]),CMP);

  自己写一个纯字符串:(temp是二维字符串数组,J是要排序的字符串总数)

  int cmpstr(const void *a,const void *b)

  {

  返回strcmp((char*)a,(char *)b);

  }

  qsort(temp,j,sizeof(temp[0]),cmpstr);

  七。计算几何中凸包的cmp

  Int (constvoid * a,const void * b)//键cmp函数按旋转角度对除1点以外的所有点进行排序。

  {

  结构点*c=(点*)a;

  结构点*d=(点*)b;

  if( calc(*c,*d,p[1]) 0)返回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)/

  返回1;

  否则返回-1;

  }

  Qsort()是C库stdlib.h中的一个函数,需要通过比较函数进行排序;

  Sort()是STL中的标准算法。

  #包含stdlib.h

  int cmp(常量void *a,常量void *b)

  {

  return *(int *)b)-*((int *)a);

  }。。

  qsort(q,n,sizeof(int),CMP);。

  }

  一维数组和字符串数组的Qsort排序;

  #include stdio.h

  #include stdlib.h

  int a[100];

  int cmp(常量void *p,常量void *q)

  {

  return(*(int *)p)-*((int *)q);

  }

  int main()

  {

  int n;

  scanf(%d ,

  for(int I=0;我我)

  scanf(%d ,a[I]);

  qsort((void*)a,n,sizeof(a[0]),CMP);

  for(int I=0;我我)

  printf(%d\n ,a[I]);

  //while(1);

  int cmp(常量void *p,常量void *q)

  {

  返回strcmp((char*)p,(char *)q);

  }

  int main()返回0;

  }

  #include stdio.h

  #include stdlib.h

  #include string.h

  char a[20005][25];

  {

  int n,m,I,j;

  while(1)

  {

  scanf(%d%d ,n,

  if(n==0m==0)break;

  for(I=0;我我)

  {

  scanf(%s ,a[I]);

  }

  qsort((void*)a,n,sizeof(a[0]),CMP);

  for(I=0;我我)

  printf(%s\n ,a[I]);

  }

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: