利用回調函數擴展冒泡排序的功能:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef int(*Comp)(int a, int b);
void Swap(int* x, int* y)
{
int temp = *x;
*x = *y;
*y = temp;
}
void BubbleSort(int* arr, int size, Comp comp)
{
for (int bound = 0; bound < size; ++bound)
{
for (int cur = size - 1; cur>bound; --cur)
{
if (!comp(arr[cur - 1], arr[cur]))
{
Swap(&arr[cur - 1], &arr[cur]);
}
}
}
}
int Less(int a, int b)//升序
{
return a < b ? 1 : 0;
}
int Greater(int a, int b)//降序
{
return a>b ? 1 : 0;
}
int AbsLess(int a, int b)//絕對值升序
{
return abs(a) < abs(b) ? 1 : 0;
}
int AbsGreater(int a, int b)//絕對值降序
{
return abs(a)>abs(b) ? 1 : 0;
}
int main()
{
int arr[] = { 9, 5, 2, -7, 6, 4 };
int size = sizeof(arr) / sizeof(arr[0]);
BubbleSort(arr, size,AbsLess);
for (int i = 0; i < size; ++i)
{
printf("%d ", arr[i]);
}
printf("\n");
system("pause");
return 0;
}