c++函数库中提供了快速排序函数qsort,它是一种高效的排序算法。
qsort函数的形式为:
void qsort(void *array,int nelem,int width,int(*fcmp)(const void *,const void *));
第一个参数是参与排序的数组的首地址
第二个参数是参与排序数组的元素个数
第三个参数是单个元素所属数据类型的长度(字节数)
第四个参数是指向函数的指针,用于指向用户设计的比较函数
举例:
一:整型数组的排序
比较函数:
int comp(const void *a,const void *b){
return *(int *)a-*(int *)b;
}
调用形式:
qsort(a,100,sizeof(int),comp);
二:对double性数据排序
View Code
#include<iostream> using namespace std; int cmp( const void *a , const void *b ) { return *(double *)a > *(double *)b ? 1 : -1; } int main(){ double in[4]={39.9,43.6,5,65.0}; qsort(in,4,sizeof(double),cmp); for(int i=0;i<4;i++) cout<<in[i]<<" "; return 0; }
三:字符串排序
比较函数:
int comp(const void *a,const void *b){
return strcmp((char *)a,(char *)b);
} 调用形式:
char [100][15]; .....
qsort(a,1000,sizeof(char)*15,comp);
View Code
#include<cstdlib> using namespace std; typedef char Element_type; Element_type list[]="sdfajlkjdsaffsd"; int comp(const void *p1,const void *p2){ //降序排序 //return strcmp((char *)p2,(char *)p1); //升序排序 return strcmp((char *)p1,(char *)p2); } int main(){ cout<<"排序前:"; cout<<list<<endl; //考虑到字符串结束符,所以元素个数减一 qsort(list,sizeof(list)/sizeof(Element_type)-1,sizeof(Element_type),comp); cout<<"排序后:"<<list<<endl; system("pause"); return 0; }
四:结构体排序
View Code
//此题是按ID对结构体排序 #include<iostream> #define LT 100 //书名长度 #define LA 40 //作者名字长度 using namespace std; typedef struct b{ int ID; char title[LT];//书名 char author[LA];//作者名 }Book; Book *readbook(int *nb){ int k; Book *B; cin>>*nb; B=new Book[*nb*sizeof(Book)]; for(k=0;k<*nb;k++){ cin>>B[k].ID; cin.get(); cin.getline(B[k].title,LT);//省略最后一个参数,系统默认结束符为'\0' cin.getline(B[k].author,LA); } return B; } void writebook(Book B[],int nb){ int k; cout<<nb<<endl; for(k=0;k<nb;k++){ cout<<B[k].ID<<endl; cout<<B[k].title<<endl; cout<<B[k].author<<endl; } } int compare(const void *b1,const void *b2){ Book *aa=(Book *)b1; Book *bb=(Book *)b2; return ((aa->ID)-(bb->ID)); } int main(){ Book *B; int nb; B=readbook(&nb); qsort(B,nb,sizeof(Book),compare); writebook(B,nb); return 0; }