功 能: 快速排序
头文件:stdlib.h
用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
参数:
1 待排序数组首元素的地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
利用qsort函数实现整数从小到大和从大到小的排序
#include<cstdio>
#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;
int cmpInc(const void *a,const void *b)
{
return *(int*)a-*(int*)b;
}
int cmpDec(const void *a,const void *b)
{
return *(int*)b-*(int*)a;
}
int main()
{
int a[10]={2,5,9,63,89};
int b[10]={3,69,58,23,59};
int len=5;
printf("递增排序的结果:\n");
qsort(a,len,sizeof(a[0]),cmpInc);
for(int i=0;i<len;i++)
{
if(i==0)
printf("%d",a[i]);
else
printf(" %d",a[i]);
}
printf("\n");
printf("递减排序的结果:\n");
qsort(b,len,sizeof(b[0]),cmpDec);
for(int i=0;i<len;i++)
{
if(i==0)
printf("%d",b[i]);
else
printf(" %d",b[i]);
}
printf("\n");
return 0;
}
利用qsort函数根据字符串的长度来排序
#include<cstdio>
#include<iostream>
#include<cstring>
#include<stdlib.h>
#define M 12
#define N 20
using namespace std;
int cmpInc(const void *a,const void *b)
{
return strlen((char *)a)-strlen((char*)b);
}
int cmpDec(const void *a,const void *b)
{
return strlen((char *)b)-strlen((char *)a);
}
int main()
{
char s[M][N]=
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
printf("按照字符串长度递增排序:\n");
qsort(s,M,sizeof(char)*N,cmpInc);
for(int i=0;i<M;i++)
printf("%s\n",s[i]);
printf("\n");
printf("按照字符串长度递减排序:\n");
qsort(s,M,sizeof(char)*N,cmpDec);
for(int i=0;i<M;i++)
printf("%s\n",s[i]);
printf("\n");
return 0;
}
利用qsort函数根据字符串的字母顺序排序:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<stdlib.h>
#define M 12
#define N 20
using namespace std;
int cmpInc(const void *a,const void *b)
{
return *(char*)a-*(char*)b;
}
int cmpDec(const void *a,const void *b)
{
return *(char*)b-*(char*)a;
}
int main()
{
char s[M][N]=
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
printf("按照字符串字母递增的顺序排序:\n");
qsort(s,M,sizeof(char)*N,cmpInc);
for(int i=0;i<M;i++)
printf("%s\n",s[i]);
printf("\n");
printf("按照字符串字母递减的顺序:\n");
qsort(s,M,sizeof(char)*N,cmpDec);
for(int i=0;i<M;i++)
printf("%s\n",s[i]);
printf("\n");
return 0;
}
最重要的一个:利用qsort函数对一个结构体排序:
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<iostream>
#define N 6
using namespace std;
typedef struct
{
char name[15];
int score;
}Student;
int cmpInc1(const void *a,const void *b)
{
return (((Student*)a)->score)- (((Student*)b)->score);
}
int cmpInc2(const void *a,const void *b)
{
return *(((Student*)a)->name)-*(((Student*)b)->name);
}
void print(Student s)
{
printf("%-15s: %d\n",s.name,s.score);
}
int main()
{
Student s[N]=
{
"Zhang San", 94,
"Li Si", 80,
"You", 94,
"I", 100,
"He", 72,
"She", 60
};
printf("按照成绩递增的顺序排序:\n");
qsort(s,N,sizeof(Student),cmpInc1);
for(int i=0;i<N;i++)
print(s[i]);
printf("\n");
printf("按照名字字母递增的顺序排序:\n");
qsort(s,N,sizeof(Student),cmpInc2);
for(int i=0;i<N;i++)
print(s[i]);
printf("\n");
return 0;
}