数据结构与算法-----搜索和排序(C语言库函数的使用)

本文介绍了如何使用C语言的标准库函数qsort进行快速排序,以及bsearch进行二元搜索。qsort函数用于对数组进行排序,其参数包括数组起始地址、元素数量和大小,以及比较函数。bsearch函数则在已排序的数组中查找特定元素,同样需要比较函数来确定元素顺序。两者都依赖于用户自定义的比较函数来确定元素之间的相对大小。
摘要由CSDN通过智能技术生成

qsort(利用快速排序法排列数组)
库头文件stdlib.h
定义函数 void qsort(void * base,size_t nmemb,size_t size,int ( * compar)(const void , const void ));
函数说明 参数base指向欲排序的数组开头地址,参数nmemb代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar为一函数指针,这个函数用来判断两个元素间的大小关系,若传给compar的第一个参数所指的元素数据大于第二个参数所指的元素数据则必须回传大于零的值,两个元素数据相等则回传0。
bsearch(二元搜索) (按升序排好的数据)
定义函数 void bsearch(const void *key,const void *base,size_t nmemb,size_tsize,int (*compar) (const void,const void*));
函数说明 bsearch()利用二元搜索从排序好的数组中查找数据。参数key指向欲查找的关键数据,参数base指向要被搜索的数组开头地址,参数nmemb 代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar 为一函数指针,这个函数用来判断两个元素之间的大小关系,若传给compar 的第一个参数所指的元素数据大于第二个参数所指的元素数据则必须回传大于0 的值,两个元素数据相等则回传0。
附加说明 找到关键数据则返回找到的地址,如果在数组中找不到关键数据则返回NULL。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmpInt(const void *a,const void *b){
    return *(const int*)a - *(const int*)b;
}
int cmpStr(const void *a,const void *b){
    return strcmp(*(const char* const*)a,*(const char* const*)b);
}
int main(){
    int i,j;
    int num,size;
    /*对数字进行排序和搜索*/
    int Int[]={1,3,2,4,5,9,8,6,7,0};
    num=sizeof(Int)/sizeof(Int[0]);
    size=sizeof(Int[0]);
    qsort(Int,num,size,cmpInt);
    for(i=0;i<num;i++)
        printf("[%d] ",Int[i]);
    printf("\n");
    int searchNum;
    printf("Pls input the search num:");
    scanf("%d",&searchNum);
    int *ip=bsearch(&searchNum,Int,num,size,cmpInt);/*此处为重点,传入的是地址*/
    (ip==NULL)?puts("Not Found"):puts("Found");

    /*对字符串进行排序和搜索*/
    char* Str[]={"BeiJing","ShangHai","TianJin","ChongQing","LuoYang","HangZhou"};
    num=sizeof(Str)/sizeof(Str[0]);
    size=sizeof(Str[0]);
    qsort(Str,num,size,cmpStr);
    for(j=0;j<num;j++)
        printf("[%s] ",Str[j]);
    printf("\n");
    char *searchStr="LuoYang";
    char *sp=(char *)bsearch(&searchStr,Str,num,size,cmpStr);/*此处为重点,传入的是地址*/
    (sp==NULL)?puts("Not Found"):puts("Found");

    /*对中文汉字进行排序和搜索*/
    const char* ChineseStr[]={"北京","上海","洛阳","郑州","西安"};
    num=sizeof(ChineseStr)/sizeof(ChineseStr[0]);
    size=sizeof(ChineseStr[0]);
    qsort(ChineseStr,num,size,cmpStr);
    for(j=0;j<num;j++)
        printf("[%s] ",ChineseStr[j]);
    printf("\n");
    const char* searchChinese="洛阳";
    char *sc=(char *)bsearch(&searchChinese,ChineseStr,num,size,cmpStr);
    (sc==NULL)?puts("Not Found"):puts("Found");     

    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值