首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用C语言实现带函数指针的Bubblesort算法

Bubblesort算法是一种简单的排序算法,它通过多次交换相邻元素的位置来实现排序。函数指针是指向函数的指针变量,可以用来动态地调用不同的函数。

在C语言中,可以使用函数指针来实现带函数指针的Bubblesort算法,具体步骤如下:

  1. 首先,定义一个函数指针类型,用于指向比较函数。比较函数的作用是判断两个元素的大小关系,返回一个整数值表示它们的比较结果。
代码语言:txt
复制
typedef int (*CompareFunc)(int, int);
  1. 接下来,实现Bubblesort算法的函数。该函数接受一个整型数组和数组长度作为参数,同时接受一个函数指针作为比较函数的参数。
代码语言:txt
复制
void bubbleSort(int arr[], int len, CompareFunc compare) {
    int i, j;
    for (i = 0; i < len - 1; i++) {
        for (j = 0; j < len - i - 1; j++) {
            if (compare(arr[j], arr[j + 1]) > 0) {
                // 交换相邻元素的位置
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
  1. 最后,实现一个比较函数,用于比较两个整数的大小。
代码语言:txt
复制
int compareInt(int a, int b) {
    return a - b;
}

通过以上步骤,我们可以使用C语言实现带函数指针的Bubblesort算法。调用该算法时,可以传入不同的比较函数来实现不同的排序需求。

下面是一个示例代码:

代码语言:txt
复制
#include <stdio.h>

typedef int (*CompareFunc)(int, int);

void bubbleSort(int arr[], int len, CompareFunc compare) {
    int i, j;
    for (i = 0; i < len - 1; i++) {
        for (j = 0; j < len - i - 1; j++) {
            if (compare(arr[j], arr[j + 1]) > 0) {
                // 交换相邻元素的位置
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int compareInt(int a, int b) {
    return a - b;
}

int main() {
    int arr[] = {5, 2, 8, 1, 9};
    int len = sizeof(arr) / sizeof(arr[0]);

    bubbleSort(arr, len, compareInt);

    printf("排序结果:");
    for (int i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

这段代码会将数组 {5, 2, 8, 1, 9} 进行升序排序,并输出排序结果。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数计算(Serverless):https://cloud.tencent.com/product/scf
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动推送):https://cloud.tencent.com/product/umeng
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云虚拟专用网络(VPC):https://cloud.tencent.com/product/vpc
  • 腾讯云安全产品(SSL证书):https://cloud.tencent.com/product/ssl
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言函数传参:指针指针

这是道哥第013篇原创 前言 今天同事问了一个问题:在函数参数中传递指针指针,很常用一个场景,重新梳理一下记录于此,以后如果有类似的问题直接发这篇小总结就可以了。...size个字节空间,然后返回给main函数pData指针。...到这里就已经看到程序崩溃原因了:虽然给指针p赋值了,但是实参pData中内容一直为空,因此从do_malloc函数返回之后,pData仍然是一个空指针,所以就崩溃了。...在do_malloc函数中,调用系统函数malloc成功之后返回所分配空间首地址,关键是要把这个首地址送给pData指针,也就是说要让pData指针变量中值等于这个堆空间首地址。...执行do_malloc(&pData, 128); 把pData指针地址作为实参进行传递,因为pData本身就是一个指针,加上取地址符&,就是指针指针(二级指针),因此do_malloc函数第一个参数就要定义成

2.1K20

LeetCode 复制随机指针链表(C语言)

新节点 next 指针和 random 指针也都应指向复制链表中新节点,并使原链表和复制链表中这些指针能够表示相同链表状态。复制链表中指针都不应指向原链表中节点 。...那么在复制链表中对应两个节点 x 和 y ,同样有 x.random --> y 。 返回复制链表头节点。 一个由 n 个节点组成链表来表示输入/输出中链表。...每个节点一个[val,random_index] 表示: val:一个表示 Node.val 整数。...代码实现 Definition for a Node. struct Node { int val; struct Node *next; struct Node *random...,p1是原链表中下一个结点指针 cur=head;//cur是遍历原链表 while(cur)//遍历原结点 { p1=cur->next;

74600

c语言函数指针用法_函数指针作为形参

文章目录 导引 指针函数 指针函数定义 指针函数三种写法 代码示例 函数指针 定义 代码示例 函数指针指针函数区别 定义不同 写法不同 用法不同 导引 函数指针指针函数,在学习 C 语言时候遇到这两个东西简直头疼...,当然还有更头疼,比如什么函数指针函数指针函数指针、数组指针指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,特别是刚开始学习这门语言童鞋,估计碰到这些东西就已经要崩溃了,...然后好不容易死记硬背下来应付考试或者面试,然后过了几天发现,又是根本不会用,也不知道该在哪些地方,这就尴尬了。...当然,也要看个人习惯,如果理解其定义,随便怎么都行啦。...再简单一点,可以这样辨别两者:函数括号就是函数指针,否则就是指针函数

60120

C语言笔记】函数指针作为函数参数

函数指针有两种常用用法,一种是作为结构体成员,关于函数指针作为结构体成员用法可移步至上一篇【C语言笔记】函数指针作为结构体成员进行查看。另一种是函数指针作为函数参数。...先假设有这样一种情况:我们要编写一个库,它提供了某些排序算法实现(如冒泡排序、快速排序等等),为了能让库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应逻辑;或者,能让库可用于多种数据类型(...void *)) 这是在C通用工具库中声明一个快速排序算法函数,其可以用来排序int类型、float类型以及字符串数据,可以按从小到大顺序也可以按从大到小顺序排序。...其关键在于函数指针comp指向函数具体实现。 二、举例说明 上一节我们使用函数指针作为结构体成员来实现四则运算,这里一节我们稍微修改一下代码,使用函数指针作为函数参数来实现四则运算。...关于typedef与define区别可查看往期笔记:【C语言笔记】#define与typedef区别?

9.3K11

C进阶:指针(2),qsort函数,模拟实现冒泡算法

一.回调函数 要想理解回调函数,就要先知道什么是函数指针函数指针详见:http://t.csdn.cn/oYiuC 1.回调函数定义 函数指针作为某个函数参数 函数指针变量可以作为某个函数参数来使用...简单讲:回调函数是由别人函数执行时调用你实现函数。...: 三.模拟实现冒泡算法 1.什么是冒泡排序 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单排序算法。...,它只能排整型数据,那我们可不可以写一个类似于冒泡排序算法函数实现可以排序任何数据呢?...这就需要利用到回调函数了 2.模拟实现冒泡算法 通过上文我们知道,qsort 是一个可以快速排序函数,它使用起来很方便,那么我们就可以模仿 qsort 函数定义来实现 一个可以排任何数据冒泡函数

9910

c语言函数指针理解与使用

C)这很容易,fun3是函数名,p1,p2是参数,其类型为char *型,函数返回值为char *类型。...B) 也很简单,与C)表达式相比,唯一不同就是函数返回值类型为char**,是个二级指针。 A) fun1是函数名吗?回忆一下前面讲解数组指针情形。...通过(*pf)取出存在这个地址上函数,然后调用它。   这里需要注意到是,在Visual C++6.0里,给函数指针赋值时,可以&fun或直接函数名fun。...使用函数指针好处在于,可以将实现同一功能多个模块统一起来标识,这样一来更容易后期维护,系统结构更加清晰。或者归纳为:便于分层设计、利于系统抽象、降低耦合度以及使接口与实现分开。 4....指针专题一 C语言 指针专题二 C语言 函数1 C语言 函数2 C语言指针核心16讲 指针专题一 C语言指针核心16讲 指针专题二

63410

C语言函数指针(*(void(*)())0)();

‘’ 我刚开始学习C语言时候是写简单数学运算在黑框框里面跑,然后用C语言写51单片机代码,再到后来玩stm32,学应用层编程,学内核编程等,框架结构逐渐变复杂,也越来越觉得对C语言理解还不够到位...个人总结一下C语言中有关函数知识,如有问题请留言指明*v* (*(void(*)())0)(); 其实这个语句只有在微处理器最底层才有可能被调用,因为应用层几乎没有直接对一个地址进行操作。...什么是函数指针变量? 怎么通过函数指针变量调用函数函数指针变量是怎么定义? 第一个问题:我们知道一个函数形式是 type func(type...)...func就是一个函数指针,我们假设一个指针变量funcp = &func; 那么funcp就是一个函数指针变量。 第二个问题:正常函数调用直接使用func(...);就可以了。...C语言函数指针非常重要,大工程里面经常出现各种回调函数,学习过程中,基本功还是要扎实,不然真的会经常踏入陷阱。 ps:本文参考资料《C陷阱与缺陷》,感兴趣同学可以读一读

1.7K20

c语言函数指针理解与使用

C)这很容易,fun3是函数名,p1,p2是参数,其类型为char *型,函数返回值为char *类型。...B) 也很简单,与C)表达式相比,唯一不同就是函数返回值类型为char**,是个二级指针。 A) fun1是函数名吗?回忆一下前面讲解数组指针情形。...通过(*pf)取出存在这个地址上函数,然后调用它。   这里需要注意到是,在Visual C++6.0里,给函数指针赋值时,可以&fun或直接函数名fun。...使用函数指针好处在于,可以将实现同一功能多个模块统一起来标识,这样一来更容易后期维护,系统结构更加清晰。或者归纳为:便于分层设计、利于系统抽象、降低耦合度以及使接口与实现分开。 4....指针专题一 C语言 指针专题二 C语言 函数1 C语言 函数2 C语言指针核心16讲 指针专题一 C语言指针核心16讲 指针专题二

1K30

一看就会C语言笔记——指针函数函数指针、回调函数

//指针函数指针函数本质是一个函数,只不过返回值为某一类型指针(地址值)。 //函数返回值必须用同类型变量来接受,也就是说,指针函数返回值必须赋值给同类型指针变量。...而这个存储着函数地址指针就是函数指针。 //换言之,我们所说指针变量通畅指向一个整形、字符型、或者数组等变量,而函数指针指向函数。...//函数指针定义格式:类型名 (*函数名)(函数参数列表) //我们可以发现,这里"*函数名"是括号括起来 // //回调函数函数指针作为某个函数参数 //我们知道,函数指针变量也是一个变量,...如果规则有变,只需要对应员工知道哪里改变了,而经理不需要关注这些细节。 //以上就是回调函数 小编给大家推荐一个学习氛围超好地方,C/C++交流企鹅裙:870963251!..."请输入三个数字:"); scanf("%d %d %d", & a, & b, & c); /* 与直接调用函数等价,d = max(max(a, b), c) */ d = p(p(a, b), c

2.4K00

C语言 | 指向指针指针对n个整数排序

例82:C语言指向指针指针方法对n个整数排序并输出;要求将排序单独写成一个函数;n个整数在主函数中输入,最后在主函数中输出。...解题思路:读者看着道题时候,首先要观察一下有什么规律,然后指向指针指针在上一道练习题中已经有了铺垫,读者可以联系上一道题去熟练使用指向指针指针。...C语言源代码演示: #include//头文件  int main()//主函数  {   void sort(int **point,int number); //sort排序函数声明...,&number);//键盘输入    for(i=0;i<number;i++)   {     pstr[i]=&data[i]; //将第i个整数地址赋予指针数组pstr第i个元素    }...以上,如果你看了觉得对你有所帮助,就给小林点个赞,分享给身边的人叭,这样小林也有更新下去动力,跪谢各位父老乡亲啦~ C语言学习路线     C语言开发工具 更多案例可以go公众号:C语言入门到精通

1.4K22

C语言函数指针和回调函数详解

这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向地址。...pfun ,这个函数指针返回值为void型,然后我们给函数指针赋值,赋值为myfun,也就是myfun函数首地址,在C99中myfun函数名就是myfun函数首地址,此时pfun获得了myfun地址...,pfun地址等于myfun地址,所以最终调用pfun();也就相当于调用了myfun(); 第二种用法:typedef 原变量类型 别名 也可以typedef来定义一个指针函数这样使在大型代码中更加简洁...p = myfun可以理解为将函数指针p指向myfun函数地址,p(100);相当于执行myfun(100); 第三种结构体函数指针方法 #include #include...先假设有这样一种情况:我们要编写一个库,它提供了某些排序算法实现(如冒泡排序、快速排序、shell排序、shake排序等等),为了能让库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应逻辑;

76910

C 语言】结构体相关 函数 指针 数组

结构体概述 : 结构体是 多个 变量集合, 变量类型可以不同; -- 可进行操作 : 结构体可以进行 拷贝 赋值操作, 可以作为 函数参数 和 函数返回值; 1....结构标记 声明变量; -- 定义结构体时声明变量 : 这种声明变量方式可以不用 结构标记, 变量名写在 花括号 后面, 头号隔开; struct student { char *name;...class c1 = {s2, s3}; return c1; } -- 传递结构体指针 : 传递结构体指针, 访问形式如下; /* * 传入一个结构体指针 * 通过指针访问结构体方法 :...->name 分析 : 获取 结构体中 name 字符串值(注意不是指针|地址); -- *p++->name 分析 : 先获取 name 字符串值, 再将p自增; 结构体函数示例 : /****...指向结构体指针 (1) 使用指针方式实现上面的关键字统计程序 使用指针进行二分查找 :  -- 使用下标找中值 : 在之前找中值时通过 mid = (low + high)方法, 这样做可行是因为 low

2.9K20

指针进阶三】实现C语言快排函数qsort&回调函数

经典快速排序算法-Quick_sort 先来手动实现一下Quick_sort 排序函数 #include void Swap(int* a, int* b) { int temp...1. qsort排序函数基本介绍 qsort排序函数C语言标准库里函数,实现原理是快速排序算法,函数原型如下:  qsort函数相关参数介绍和意义: 头文件: #include...: 可以接收任何类型指针 不能直接加减整数,使用前需要强转  因为cmp比较函数需要使用者自行设计,所以对于不同使用者在qsort函数里传给cmp函数参数类型可能是任何类型指针,所以在cmp...比较函数内得用void*类型指针来接收,使用时只需将void* 类型指针做出相应强转即可。...elem1==elem2 返回值<0             elem1<elem2  2. qsort函数具体实现 学习qsort函数具体实现,你将学到这个C语言函数另一个绝妙地方。

46630
领券