当前位置: 代码迷 >> 综合 >> qsort()排序函数
  详细解决方案

qsort()排序函数

热度:68   发布时间:2024-01-04 11:24:42.0

n  排序是最常用的预处理技术

n  qsort包含在<stdlib.h>头文件中

n  函数根据你给的比较条件进行快速排序

n  排序之后的结果仍然放在原数组中

n  使用qsort函数必须自己写一个比较函数。

一、对整型数组排序

Int main()

{

  int a[10]={4,2,7,3,6,1,5};

  int i,n=7;

  qsort(a, n,sizeof(a[0]),cmp);

  for(i=0;i<n;i++)

      printf(“%d “,a[i]);

}

int cmp ( const void *a , const void *b )
{
int *c=(int *)a; //(int*)
是强制类型转换

Int *d=(int *)b;

return *c-*d;

}

等同于return *(int *)a - *(int *)b;

二、对char类型数组排序(同int类型)

n  Int main()

n  {

n    char str[10]=“gjlfjsder”;

n    int i,n;

n    n=strlen(str);

n    qsort(a, n,sizeof(a[0]),cmp);

n    puts(str);

n  }

n  int cmp ( const void *a , const void *b )
{
char *c=(char *)a; //(char*)
是强制类型转换

n  char *d=(char *)b;

n  return *c-*b;

n  }

n   

等同于return *(char *)a - *(char *)b;

三、对double类型数组排序(同int类型)

n  Int main()

n  {

n    double a[10]={5, 2.5, 1.3, 3.2};

n    int i,n=4;

n    qsort(a, n,sizeof(a[0]),cmp);

n    for(i=0;i<n;i++)

        printf(“%.2f “,a[i]);}

int cmp ( const void *a , const void *b )
{
double *c
*d;

c=(double *)a;

d=(double *)b;

return *c>*d ? 1 : -1; //不是return *c-*d

}

等同于return *(double*)a > *(double *)b ? 1:-1;

四、对结构体数组一级排序

n  struct student
{
char name[10];
int score;
}stu[100];

n  int cmp( const void *a ,const void *b)

n  {
struct student *c, *d;

n  c=(struct student *)a;

n  d=(struct student *)b;

n  return  d->score – c->score;   //降序

n  }

n  调用:qsort(stu, 100, sizeof(stu[0]),cmp)

五、对结构体数组二级排序

按照成绩的值从大到小排序,

成绩相同者按姓名从小到大排序

n  struct student
{
char name[10];
int score;
}stu[100];

n  int cmp( const void *a ,const void *b)

n  {
struct student *c, *d;

n  c=(struct student *)a;

n  d=(struct student *)b;

n  if(d->score!=c->score)

n     return  d->score – c->score;   //降序

n  else  //成绩相同,按姓名升序

n     return strcmp(c->name, d->name);

n  }

n  调用:qsort(stu, 100, sizeof(stu[0]),cmp)