1.先说一下什莫是冒泡排序
冒泡排序(Bubble Sort)
冒泡排序算法的原理如下:
-
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
3.针对所有的元素重复以上的步骤,除了最后一个。
-
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
源序列: 12, 43, 23, 15, 145, 132, 67, 84, 56, 79, 35, 57 (n=6个数)
第一趟: 12,23,15,43,132,67,84,56,79,35,57,145 第一次就能找到最大数
第二趟: 12 ,15,23,43,67,84,56,79,35,57,132,145
第三趟:12,15 ,23,43,67,56,79,35,57,84,132,145
.
.
.
- #include<stdio.h>
- #include<stdlib.h>
- typedef int(*Compare)(void *, void *);
- typedef void(*Swap)(void *, void *);
- void Bubble(void *arr, int len,int element, Compare cp, Swap sw)
- {
- for (int i = 0; i < len - 1; ++i)
- {
- for (int j = 0; j < len - 1 - i; j++)
- {
- if (cp((char*)arr+j*element, (char*)arr+(j+1)*element))
- {
- sw((char*)arr + j*element, (char*)arr + (j + 1)*element);
- }
- }
- }
- }
- void my_swap(void *a, void *b)
- {
- int *p = (int *)a;
- int *q = (int *)b;
- int tmp = *p;
- *p = *q;
- *q = tmp;
- }
- int my_compare(void *a, void *b)
- {
- int *p = (int *)a;
- int *q = (int *)b;
- if (*p > *q)
- {
- return 1;
- }
- return 0;
- }
- void Show(int *arr, int len)
- {
- for (int i = 0; i < len; ++i)
- {
- printf("%d ", arr[i]);
- }
- printf("\n");
- }
- int main()
- {
- int arr[] = { 12, 43, 23, 15, 145, 132, 67, 84, 56, 79, 35, 57 };
- Bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), my_compare, my_swap);
- Show(arr, sizeof(arr) / sizeof(arr[0]));
- return 0;
- }
这种通用方法还用到了函数指针,回掉函数,,等等在总结一下函数指针,和回掉函数