C语言库函数中的排序和查找函数
来源:互联网 发布:淘宝手办怎么验货拒签 编辑:程序博客网 时间:2024/05/20 06:37
之前在写程序的时候,无论是查找还是排序基本上都是自己写程序,很少或者说从来没有用过C语言中的库函数来搞定这种问题,今天看书发现C语言其实把这种问题已经解决了,我们需要做的就是调用这样的函数就可以了
对于查找的数据我们使用
void *bsearch(const void *key,const void *base,size_t num,size_t width,int (*cmp)(const void *v1,const void *v2));
上面的那个函数
其中key指向需要查找的那个元素,base是查找数据源(数组)的第一个元素,num指出数组包含的元素数,width指的是每个元素的宽度,cmp函数是比较函数
比较函数cmp必须满足两个要求
1、接受两个指向数据项的指针作为参数
2、返回这样的一个int值
a、如果元素1<元素2,则小于0
b、如果元素1=元素2,则等于0
c、如果元素1>元素2,则大于0
进行排序的的库函数qsort
void qsort(void *base,size_t num,size_t size,int (*cmp)(const void *element1,const void *element2));
和上面的参数基本上的意义相当
例子:
排序算法
//#define NDEBUG#include <stdio.h>#include <stdlib.h>#include <string.h>#include <malloc.h>#include <time.h>#include <assert.h>int intcmp(const void *v1,const void *v2);int main(){srand(time(0));int max_number;printf("please input a number:\n");scanf("%d",&max_number);assert(max_number>0);int *a = (int *)malloc(sizeof(int)*max_number);for (int i=0;i<max_number;i++){a[i] = rand()%100;}printf("before sorting:\n");for (int i=0;i<max_number;i++){printf("%d\t",a[i]);if ((i+1)%5==0){printf("\n");}}printf("after sorting:\n");qsort(a,max_number,sizeof(a[0]),intcmp);for (int i=0;i<max_number;i++){printf("%d\t",a[i]);if ((i+1)%5==0){printf("\n");}}system("pause");return 0;}int intcmp(const void *v1,const void *v2){return *(int *)v1-*(int *)v2;}
查找的例子:
这个必须是基于第一个排序完成,因为这个库函数要求,所要查询的数组必须是升序排列好的,因为是二分查找,二分查找要求查询的数据必须是有序的。
//#define NDEBUG#include <stdio.h>#include <stdlib.h>#include <string.h>#include <malloc.h>#include <time.h>#include <assert.h>int intcmp(const void *v1,const void *v2);int main(){srand(time(0));int max_number;printf("please input a number:\n");scanf("%d",&max_number);assert(max_number>0);int *a = (int *)malloc(sizeof(int)*max_number);for (int i=0;i<max_number;i++){a[i] = rand()%100;}printf("before sorting:\n");for (int i=0;i<max_number;i++){printf("a[%d] = %d\t",i,a[i]);if ((i+1)%5==0){printf("\n");}}printf("after sorting:\n");qsort(a,max_number,sizeof(a[0]),intcmp);for (int i=0;i<max_number;i++){printf("a[%d] = %d\t",i,a[i]);if ((i+1)%5==0){printf("\n");}}int number;int *ptr;printf("please input a number you want to search:\n");scanf("%d",&number);ptr = (int *)bsearch(&number,a,max_number,sizeof(a[0]),intcmp);if (ptr!=NULL){printf("the number %d at the location of a[%d]",number,ptr-a);}elseprintf("%d not found!\n",number);system("pause");return 0;}int intcmp(const void *v1,const void *v2){return *(int *)v1-*(int *)v2;}
0 0
- C语言库函数中的排序和查找函数
- c语言库函数中自带排序和查找函数懂得应用
- C语言使用stdlib.h库函数的二分查找和快速排序程序
- C语言中库函数自带的查找函数bsearch
- C语言排序和查找
- C语言:编写查找和排序函数(二分查找,冒泡排序,选择排序法)
- 排序和查找的库函数
- C语言标准库函数之qsort排序函数
- C语言中库函数自带的排序函数qsort
- c语言库函数 qsort(快速排序函数)
- 如何利用C语言中的qsort库函数实现快速排序?
- 如何利用C语言中的qsort库函数实现快速排序
- C语言中的排序、二分查找
- C语言中的String库函数
- C语言 冒泡排序和二分查找
- C语言——系统函数和库函数的区别
- C语言——系统函数和库函数的区别
- C语言——系统函数和库函数的区别
- 常用的android对话框
- Ubuntu 12.04 下Webmin的安装步骤
- UCGUI的移植
- Android中怎么去掉imgview 中上下的空白?
- UI控件----TextView 实例总结
- C语言库函数中的排序和查找函数
- C内存对齐规则
- 黑盒测试之等价类划分法
- Error in invoking target 'install' of makefile
- 数据库–MySQL主从同步备份设置
- Matlab中size函数用法
- EM重建
- linux下录音并使用google API变文本
- Erlang 笔试题 2