爱嘉牛LA

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
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;
}

 

 

 

posted on 2012-04-20 21:38  爱嘉牛LA  阅读(1774)  评论(4编辑  收藏  举报