返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言库中函数qsort及bsearch快速排序算法怎么用
  • 143
分享到

C语言库中函数qsort及bsearch快速排序算法怎么用

2023-06-29 04:06:11 143人浏览 八月长安
摘要

这篇文章给大家分享的是有关C语言库中函数qsort及bsearch快速排序算法怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。qsortqsrot 就是C语言库函数中的快速排序函数,对数组,结构体都可以实现快

这篇文章给大家分享的是有关C语言库中函数qsort及bsearch快速排序算法怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

    qsort

    qsrot 就是C语言库函数中的快速排序函数,对数组,结构体都可以实现快速排序, 他在头文件<stdlib.h>中使用,声明格式为:

    void qsort(void* base, size_t nums, size_t size, int (*compare)(const void *, const void*))

    这么烦人一长串的参数各是什么意思呢,base 是指向要排序的数组的第一个元素的指针。nums是由 base 指向的数组中元素的个数。size 是数组中每个元素的大小,以字节为单位。compare 是用来比较两个元素的函数,这个比较函数需要我们自己补全。

    含义

    void*代表着任意类型的数组,这个数组也就是我们想用来排序的对象数组;size_t 在系统里面被定义成 int 类型的,所以我们可以把 size_t修饰的数默认为一个整数。

    为什么要细化出数组大小和元素大小?这和我排序有毛关系?其实这是为了区分不同类型的数组,int 和 char 类型的数组每个元素所占空间就不一样,自然要区别开。

    int main(){int arr[6] = { 1,4,5,8,2,3};qsort(arr, 6, sizeof(arr[0]), compare);}

    最后的 compare 函数我是直接将这个元素作为参数传进来,那么问题来了,这个比较函数怎么写?

    我们根本不用管那个 *compare 的指针什么鬼,他就相当于告诉你这里在用一个外部函数,我们只要明白整个函数名儿上去就是妥妥的了,这个函数名不一定就叫 compare ,诸君自便。

    实现

    后面的(const void , const void)自然就是这个函数的参数了,两个 void* 实际运用的时候就看成 a ,b,既然是外部函数我们就要自己动手了,我们的最终目的是为了排序,比较函数就应该实现数组元素大小的比较,本质上说就是在比较 a和b 的大小,而a,b是我数组中任意的两两元素。

    那首先要做的就是把这个不知道什么类型的 void 指针变成我们给定的,之前代码中给的是整型数组,这里就要对应变成整型指针,这两个指针指向数组中的两个整数,既然要比较,我们就直接做减法看正负即可,把这两个指针转换成真正的整数后就大功告成了:

    int* p = (int*)a;int* q = (int*)b;int c = *p;int d = *q;

    成品如下:

    #include<stdlib.h>int compare(const void* a,const void* b){int* p = (int*)a;int* q = (int*)b;int c = *p;int d = *q;return c - d;}int main(){int i = 0;int arr[6] = { 1,4,5,8,2,3 };qsort(arr, 6, sizeof(arr[0]), compare);for (i = 0; i < 6; i++){printf("%d ", arr[i]);}return 0;}

    结果如下

    C语言库中函数qsort及bsearch快速排序算法怎么用

    结构体的排序也是同理,如下:

    #include<stdlib.h>int compare(const void* a,const void* b){int* p = (int*)a;int* q = (int*)b;int c = *p;int d = *q;return c - d;}int main(){int i = 0;int arr[6] = { 1,4,5,8,2,3 };qsort(arr, 6, sizeof(arr[0]), compare);for (i = 0; i < 6; i++){printf("%d ", arr[i]);}return 0;}

    结果就是根据结构体中 a 成员大小来排的:

    C语言库中函数qsort及bsearch快速排序算法怎么用

    格局打开

    上面是实现从小到大排列,要实现从大到小排只需 return d - c 即可。
    2.如果是比较浮点数,注意在两个数相差不大时,介于(-1,1),因为现在是整型指针,返回值也是整型,return 回来的就是个 0,造成无意义操作,怎么处理呢?很简单,改成如下即可:

    int compare(const void* a,const void* b){int* p = (int*)a;int* q = (int*)b;int c = *p;int d = *q;if(c - d<0){return -1;}else{return 1;}}

    bsearch

    bsearch (binary search)也是C语言库函数,功能是执行二分查找,声明定义如下

    void *bsearch(const void *key, const void *base, size_t nums, size_t size, int (*compar)(const void *, const void *))

    和 qsort 一样是又臭又长,且随我慢慢看,key 是指向要查找的元素的指针,类型转换为 void*,其他的和 qsort 里的是一样的不再赘述。

    强调一下,bsearch()的使用有一个硬性要求,这个数组必须要有顺序性,从大到小或从小到大否则达咩,所以建议和 qsort 配套实验更佳。

    这个 key 就是我们的查找目标,void* 代表着一个指针,所以我们在函数里面是不能直接给出的 key 的值,那我们就取他对应的地址就行

    int key = 5;bsearch(&key,arr,6,sizeof(int),compare1);

    接下来顺水推舟验证一下:

     judge = (int*) bsearch (&key, values, 5, sizeof (int), cmpfunc);   if( judge != NULL )    {      printf("find %d is true\n", *judge);   }   else    {      printf("%d can not be found\n", *judge);   }      return(0);}

    整个代码如下:

    #include<stdlib.h>int compare(const void* a, const void* b){int* p = (int*)a;int* q = (int*)b;int c = *p;int d = *q;return c - d;}int compare1(const void* key, const void* a){return (*(int*)key-*(int*)a);}int main(){int* judge;int arr[6] = { 1,4,5,8,2,3 };qsort(arr, 6, sizeof(arr[0]), compare);int key = 5;judge = (int*)bsearch(&key, arr, 5, sizeof(int), compare1);if (judge != NULL){printf("find %d is true\n", *judge);}else{printf("%d can not be found\n", *judge);}return(0);}

    C语言库中函数qsort及bsearch快速排序算法怎么用

    感谢各位的阅读!关于“C语言库中函数qsort及bsearch快速排序算法怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

    --结束END--

    本文标题: C语言库中函数qsort及bsearch快速排序算法怎么用

    本文链接: https://lsjlt.com/news/322523.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • C语言库中函数qsort及bsearch快速排序算法怎么用
      这篇文章给大家分享的是有关C语言库中函数qsort及bsearch快速排序算法怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。qsortqsrot 就是C语言库函数中的快速排序函数,对数组,结构体都可以实现快...
      99+
      2023-06-29
    • C语言库函数qsort及bsearch快速排序算法使用解析
      目录qsort含义实现格局打开bsearchqsort qsrot 就是C语言库函数中的快速排序函数,对数组,结构体都可以实现快速排序, 他在头文件<stdlib.h>中...
      99+
      2024-04-02
    • C语言标准库函数qsort(快速排序函数)
      qsort函数是C语言标准库中提供的一个快速排序函数。它的函数原型如下:```cvoid qsort(void *base, siz...
      99+
      2023-09-23
      C语言
    • C语言 使用qsort函数来进行快速排序
      目录前言qsort的简单介绍用qsort实现一个整形类型的排序用qsort函数实现结构体的排序qsort函数的实现前言 今天分享一个库函数 介绍qsort的使用及实现方法 他可以实现...
      99+
      2024-04-02
    • C语言中关于库函数 qsort 快排的用法
      目录前言一、库函数(qsort)的含义二、(qsort)函数的实现方式,话不多说,请看。1. 第一个参数2. 第二个参数3. 第三个参数4. 第四个参数1). 函数的参数2). 这第...
      99+
      2024-04-02
    • C语言中qsort函数用法及用冒泡排序实现
      目录一、qsort函数简介二、qsort函数的使用1.整型数组排序2.字符串排序3.字符串长度排序4.浮点型数组排序5.结构体类型排序三、冒泡排序实现qsort函数的功能1.冒泡排序...
      99+
      2022-11-13
      C语言 qsort函数使用 C语言 qsort 冒泡排序 C语言 qsort
    • c语言快速排序算法怎么使用
      使用快速排序算法,需要先定义一个快速排序函数,然后在主函数中调用该函数。下面是一个示例的C语言快速排序算法的实现:```c#incl...
      99+
      2023-09-21
      c语言
    • C语言库函数中qsort()的用法
      目录(一)void*  的指针类型是什么?(二)void qsort(void*, size_t, size_t, int ( * )(const void * ,  const v...
      99+
      2024-04-02
    • C语言实现快速排序算法实例
      首先我们要对一组数据进行排序: 在数组中选一个基准数(通常为数组第一个,黄圈圈标记了); 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边,怎么移动,后面说; 对于基准数...
      99+
      2024-04-02
    • C语言如何实现快速排序算法
      这篇文章将为大家详细讲解有关C语言如何实现快速排序算法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码#define  _CRT_SECURE_NO_WARNINGS 1/...
      99+
      2023-06-22
    • C语言标准库函数qsort怎么使用
      C语言标准库函数qsort可以用来对数组进行快速排序。qsort函数的原型如下:```cvoid qsort(void *base,...
      99+
      2023-08-25
      C语言 qsort
    • C语言中排序算法怎么用
      这篇文章主要为大家展示了“C语言中排序算法怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中排序算法怎么用”这篇文章吧。排序的概念及其运用排序的概念排序:所谓排序,就是使一串记录,按照...
      99+
      2023-06-29
    • C语言常见排序算法之交换排序(冒泡排序,快速排序)
      目录前言1.交换排序——冒泡排序1.1 算法思想1.2 动图演示1.3 冒泡最好的情况 2. 交换排序——快速排序...
      99+
      2024-04-02
    • C语言之qsort函数怎么使用
      在C语言中,可以使用qsort函数对数组进行排序。qsort函数的原型如下:```cvoid qsort(void *base, s...
      99+
      2023-08-12
      C语言 qsort
    • C语言实现单链表的快速排序算法
      目录背景设计思路算法主要步骤快速排序算法实现整个程序源代码测试案例总结背景 传统QuickSort算法最大不足之处在于,由于其基于可索引存储结构设计(一般为数组或索引表),因而无法用...
      99+
      2024-04-02
    • C语言qsort函数用冒泡排序实现过程详解
      目录前言1.冒泡排序的实现1.1冒泡排序的概念1.2具体代码的实现2.qsort函数3.qsort函数的实现前言 这篇文章就是指针进阶的收尾环节了,相信看过C语言进阶—&...
      99+
      2023-02-14
      C语言qsort函数 C语言冒泡排序实现qsort函数
    • c语言快速排序代码怎么写
      下面是一个使用C语言实现快速排序的示例代码:```c#include // 交换两个元素的值void swap(int* a, in...
      99+
      2023-10-11
      c语言
    • C语言之快速排序算法(递归Hoare版)介绍
      废话不多说,先看代码 #define _CRT_SECURE_NO_WARNINGS 1 //快速排序算法,递归求解 #include <stdio.h> void ...
      99+
      2024-04-02
    • C++STL函数和排序算法的快排以及归并排序详解
      目录一、队列是什么?二、排序算法1.快速排序2、归并排序总结一、队列是什么? 头文件queue主要包括循环队列queue和优先队列priority_queue两个容器。 像栈一样,队...
      99+
      2024-04-02
    • 怎么实现及优化快速排序算法
      本篇内容主要讲解“怎么实现及优化快速排序算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么实现及优化快速排序算法”吧!前言快速排序可以说是使用最广的排序算法...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作