摘要:说明这个冒泡排序不仅适用于数组,同样适用其它数组,结构体等,因为函数中是一个一个字节进行交换的。
回调函数是指在执行一个函数中调用另一个函数,直接贴代码:
#include
#include
#include
#include
using namespace std;
int cmp_int(const void* e1, const void*e2)
{
return *(int*)e1 - *(int*)e2;
}
void print_arr(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
void Swap(char* buf1, char* buf2, int width)
{
int i = 0;
for (i = 0; i < width; i++)
{
char tmp = *buf1;
*buf1 = *buf2;
*buf2 = tmp;
buf1++;
buf2++;
}
}
void BubbleSort(void* base, size_t num, size_t width, int (*cmp)(const void*, const void*))
{
size_t i = 0;
//趟数
for (i = 0; i < num - 1; i++)
{
//比较的对数
size_t j = 0;
for (j = 0; j < num - 1 - i; j++)
{
//base[j] ==> *(base+j)
if (cmp((char*)base+j*width, (char*)base+(j+1)*width)>0)
{
//交换
Swap((char*)base + j * width, (char*)base + (j + 1) * width, width);
}
}
}
}
void test3()
{
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
BubbleSort(arr, sz, sizeof(arr[0]), cmp_int);
//打印
print_arr(arr, sz);
}
int main()
{
test3();
}
main()函数调用test3(),test3()又调用 BubbleSort()函数,而本文中 BubbleSort函数相对复杂,类似于qsort函数,进行冒泡排序,传入的四个参数分别为首地址,数组元素个数,单个数组元素个数,交换函数,BubbleSort()函数中又会调用Swap函数,Swap函数进行的是字节交换,所以强制类型转换为char型,方便一个一个字节交换,最后Swap函数又调用print_arr函数,打印出数组。
说明:这个冒泡排序不仅适用于int数组,同样适用其它数组,结构体等,因为swap函数中是一个一个字节进行交换的。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/119010.html
摘要:在阅读本文之后你能了解怎样使用回调函数。这是中回调函数的典型用法,它在中广泛被使用。这意味着回调函数本质上是一个闭包。使用命名或匿名函数作为回调在前面的例子以及的例子中,我们使用了再参数位置定义的匿名函数作为回调函数。 转自:张小俊128:http://www.html-js.com/articl..._luxiao:http://luxiao1223.blog.51cto.... j...
摘要:回调定义刚开始学习时,对回调函数的理解仅仅停留在知道定义阶段。什么是回调函数就是将一个函数作为参数传递给另一个函数,作为参数的这个函数就是回调函数。参考文章详解回调函数以为例解读异步回调和异步编程的种方法阮一峰的网络日志 回调定义 刚开始学习javascript时,对回调函数的理解仅仅停留在知道定义阶段。什么是回调函数? 就是将一个函数作为参数传递给另一个函数,作为参数的这个函数就是回...
摘要:回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。若是使用回调函数进行处理,代码就可以继续进行其他任务,而无需空等。参考理解回调函数理解与使用中的回调函数这篇相当不错回调函数 为什么写回调函数 对于javascript中回调函数 一直处于理解,但是应用不好的阶段,总是在别人家的代码中看到很巧妙的回调,那时候会有wow c...
摘要:如果你把函数的指针地址作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 同期异步系列文章推荐谈一谈javascript异步javascript异步与promisejavascript异步之Promise.all()、Promise.ra...
摘要:中文文档简单说,对象就是的回调函数解决方案。为了让回调函数的名字统一,便于在中使用。普通操作的回调函数接口对象的最大优点,就是它把这一套回调函数接口,从操作扩展到了所有操作。指定操作成功时的回调函数。 参考链接 jQuery API中文文档 jQuery.Deferred jQuery.when jQuery的deferred对象详解 jQuery deferred 对象的 prom...
javascript -- 回调函数 在高级语言层出不穷的年代, 各个语言都号称有着一切皆为对象的自豪说法, 而 js 作为一门脚本语言却相对于java等传统面向对象语言有很大的不同之处, 除了 js 诡异的继承体系之外, 最令人着迷的一个特性就是回调函数, 当然也有很多人对他诟病, 笔者认为 回调函数 和 异步 是js语言特性的两大最为突出的店, 当然正如所有优点需要满足自我的需求, 这个世界...
阅读 1055·2021-11-24 09:39
阅读 1286·2021-11-18 13:18
阅读 2372·2021-11-15 11:38
阅读 1800·2021-09-26 09:47
阅读 1589·2021-09-22 15:09
阅读 1607·2021-09-03 10:29
阅读 1462·2019-08-29 17:28
阅读 2935·2019-08-29 16:30