#include <stdio.h>
//按照升序进行排序
void bubbleSort(int arr[], int len) {
for (int count = 0; count < len; count++) {
for (int cur = 0; cur < len-1-count; cur++) {
if (arr[cur] > arr[cur + 1]) {
int temp = arr[cur];
arr[cur] = arr[cur + 1];
arr[cur + 1] = temp;
}
}
}
}
int main() {
int arr[] = { 9,4,5,1,2,7,8 };
int len = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, len);
for (int i = 0; i < len; i++) {
printf("%d\n", arr[i]);
}
return 0;
}
2.使用回调函数来实现冒泡排序。
#include <stdio.h>
typedef int(*Func)(int x, int y);
//按照升序进行排序
//能否使用一个函数(不修改源代码,就能支持降序排列,也能支持升序排序)
//此处可以借助回调函数这样的机制了
//把比较大小的机制,给提取出来,通过一个回调函数来表示。
//调用者传入不同的函数指针,就能分别表示不同的升序还是降序!!!
void bubbleSort(int arr[], int len,Func cmp) {
for (int count = 0; count < len; count++) {
for (int cur = 0; cur < len-1-count; cur++) {
/*if (arr[cur] > arr[cur + 1]) {*/
if(cmp(arr[cur],arr[cur + 1]) == 1){
int temp = arr[cur];
arr[cur] = arr[cur + 1];
arr[cur + 1] = temp;
}
}
}
}
//如果x<y,返回-1
//如果x>y,返回1
//如果x==y,返回0
//
//
int less(int x, int y) {
if (x == y) {
return 0;
}
return x < y ? -1 : 1;
}
int greater(int x, int y) {
if (x == y) {
return 0;
}
return x > y ? -1 : 1;
}
int main() {
int arr[] = { 9,4,5,1,2,7,8 };
int len = sizeof(arr) / sizeof(arr[0]);
//bubblesort的调用者,需要手动指定一个比较函数,交给bubblesort
//这个比较函数起到的作用就是在定义排序的比较规则
//此时这个less函数并不是调用者自己来调用,而是bubble sort内部来进行调用。。
/*bubbleSort(arr, len, less);*/
bubbleSort(arr, len, greater);
for (int i = 0; i < len; i++) {
printf("%d\n", arr[i]);
}
return 0;
}
类似于这样的函数,函数的调用和定义,并不一定是一个人来完成的。实际开发过程中,通常会把一个大项目,拆分成很多小的部分。有不同的人来负责完成。
一个人来实现这个函数,一个人来调用这个函数。此时,通过这种回调函数的方法。其实就能够让函数的实现者,把这个函数写的更加通用。于是调用者就可以根据自己的需要,来对代码的效果进行微调了,这样的微调就是通过回调函数来实现的。