昆明网站推广8888168,做装修的人到什么网站找工作,生成图片,中国建设质量安全协会网站目录
1.回顾回调函数
2.写一个bubble_sort函数
2.1认识一下qsort函数
编辑2.2写bubble_sort函数 今天我们继续深入学习指针
1.回顾回调函数
我们回顾一下之前学过的回调函数
回调函数就是一个通过函数指针调用的函数
如果你把函数的指针#xff08;地址#xff09;…目录
1.回顾回调函数
2.写一个bubble_sort函数
2.1认识一下qsort函数
编辑2.2写bubble_sort函数 今天我们继续深入学习指针
1.回顾回调函数
我们回顾一下之前学过的回调函数
回调函数就是一个通过函数指针调用的函数
如果你把函数的指针地址作为参数传递给另一个函数当这个指针被用来调用其所指向的函数时我们就说这是回调函数
回调函数不是由该函数的实现方直接调用而是在特定的事件或条件发生时由另外 的一方调用的用于对该事件或条件进行响应
2.写一个bubble_sort函数
2.1认识一下qsort函数
同样我们在cplusplus网站里学习一下
qsort - C Reference (cplusplus.com) 2.2写bubble_sort函数
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include stdlib.h
#include string.h
void qsort
//qsort底层使用的是快速排序
(void* base,//指向待排序数据的起始地址size_t num,//待排序数据的元素个数size_t size,//待排序数据的一个元素的大小单位是字节int(*cmp)(const void* e1, const void* e2)//函数指针指向一个比较函数这个函数是用来比较2个元素的
);
int cmp_int(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2;
}
struct Stu
{char name[20];int age;
};
int cmp_by_age(const void* e1, const void* e2)
{return ((struct Stu*)e1)-age - ((struct Stu*)e2)-age;
}
int cmp_by_name(const void* e1, const void* e2)
{return strcmp(((struct Stu*)e1)-name , ((struct Stu*)e2)-name);
}
void swap(char* buf1, char* buf2, size_t size)
{int i 0;for (i 0; i size; i){char tmp *buf1;*buf1 *buf2;*buf2 tmp;buf1;buf2;}
}//使用冒泡排序的算法模拟实现一个排序函数可以排序任意类型的数据
//bubble_sort()
void bubble_sort(void* arr,size_t sz,size_t size, int(*cmp)(const void* e1, const void* e2))
{//冒泡排序的趟数int i 0;for (i 0; i sz - 1; i){//一趟冒泡排序int j 0;for (j 0; j sz - 1 - i; j){if (cmp((char*)arrj*size,(char*)arr(j1)*size)0){swap((char*)arr j * size, (char*)arr (j 1) * size,size);}}}
}
//int(*cmp)(const void* e1, const void* e2)//e1是一个指针存放了要比较的一个元素的地址//e2是一个指针存放了要比较的一个元素的地址//e1指向的元素大于e2指向的元素返回一个0的数字//e1指向的元素等于e2指向的元素返回0//e1指向的元素小于e2指向的元素返回一个0的数字
void print_arr(int arr[], int sz)
{for (int i 0; i sz; i){printf(%d , arr[i]);}printf(\n);
}
void test1()
{int arr[] { 9,8,7,6,5,4,3,2,1,0 };//降序//排序为升序int sz sizeof(arr) / sizeof(arr[0]);print_arr(arr, sz);bubble_sort(arr, sz,sizeof(arr[0]),cmp_int);print_arr(arr, sz);
}
void test2()
{struct Stu arr[] { { zhangsan,20 } ,{ lisi, 18 }, { wangwu, 12 } };int sz sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz, sizeof(arr[0]),cmp_by_age);bubble_sort(arr, sz, sizeof(arr[0]), cmp_by_name);}
int main()
{//test1();//测试排序整型数据test2();//测试排序结构体数据return 0;
}
这里我们写的bubble_sort函数是升序的排序具体的实现细节我们后面的文章会分析