函數指針的應用範例

利用回調函數擴展冒泡排序的功能:   

#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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章