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);//省略最后一个参数,系统默认结束符为' '
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;
}
原文链接: https://www.cnblogs.com/aijianiula/archive/2012/04/20/2460115.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/48132
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!