接着昨天的二分查找,今天给大家再分享一个经典实用的算法:冒泡排序;对于冒泡排序来说要知道他的一个具体的运作机理:
冒泡排序的核心就是1,先比较,2再交换
代码如下:如有不妥之处,还请各位大佬指正
#include<stdio.h>
#include<stdlib.h>
void swap(int*x, int*y) {
int tmp = *x;
*x = *y;
*y = tmp;
}
typedef int(*Cmp)(int x, int y);
void Bubblesort(int arr[], int size, Cmp cmp) {
int bound = 0;
for (; bound < size; ++bound){
for (int cur = size - 1; cur > bound; --cur) {
if (!cmp(arr[cur - 1], arr[cur])) {
swap(&arr[cur - 1], &arr[cur]);
}
}
}
}
int less(int x, int y) {
if (x < y) {
return 1;
}
return 0;
}
/*int greater(int x, int y) {
if (x > y) {
return 1;
}
return 0;
}*/
int main(){
int arr[4] = { 9,5,2,7 };
Bubblesort(arr, 4, less/*greater*/);
for (int i = 0; i < 4; ++i) {
printf("%d\n", arr[i]);
}
system("pause");
return 0;
}
小技巧:如果遇到一些问题想用二分查找的方法来解决,但是,要查找的序列又是无序的,这时我们可以先用冒泡排序来将无序数列转换成有序数列,然后就可以使用我们的二分查找了.