回调函数(二)
demo
// DemoFunc.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <stdio.h> #include <iostream> #include <windows.h> //typedef void(*CallbackFun)(int); //void类型的函数指针,CallbackFun被声明成了一种类型,如同int char一样 typedef int(__stdcall *CompareFunction)(const byte *, const byte *); void Bubblesort(byte *array, int size, int elem_size, CompareFunction cmpFunc); void Quicksort(byte *array, int size, int elem_size, CompareFunction cmpFunc); void Bubblesort(byte *array,int size,int elem_size, CompareFunction cmpFunc) { for(int i = 0;i < size; i++) { for(int j = 0; j < size - i - 1; j++) { //回调比较函数 if(1 == (*cmpFunc)(array + j * elem_size, array + (j + 1) * elem_size)) { //两个相比较的元素相交换 byte *temp = new byte[elem_size]; memcpy(temp, array +j * elem_size, elem_size); memcpy(array + j * elem_size, array + ( j + 1) * elem_size, elem_size); memcpy(array +(j+1)* elem_size, temp, elem_size); delete []temp; } } } } int __stdcall CompareInts(const byte *velem1,const byte *velem2) { int elem1 = *(int*)velem1; int elem2 = *(int*)velem2; if(elem1 < elem2) return -1; if(elem1 > elem2) return 1; return 0; } int __stdcall CompareStrings(const byte *velem1,const byte *velem2) { const char* elem1=(char*)velem1; const char* elem2=(char*)velem2; return strcmp(elem1,elem2); } int _tmain(int argc, _TCHAR* argv[]) { int i; int array[] = {5432, 4321, 3210, 2109, 1098}; std::cout << "Before sorting ints with Bubblesort\n"; for( i = 0; i < 5; i++) std::cout << array[i] << '\n'; Bubblesort((byte*)array, 5, sizeof(array[0]), &CompareInts); std::cout << "After the sorting\n"; for(i = 0; i < 5; i++) std::cout << array[i]<< '\n'; //const char str[5][10]={"estella","danielle","crissy","bo","angie"}; //std::cout << "Before sorting strings with Quicksort\n"; //for(i = 0; i < 5; i++) // std::cout<< str[i] <<'\n'; //Quicksort((byte*)str,5,10,&CompareStrings); //std::cout << "After the sorting\n"; //for(i = 0; i < 5; i++) // std::cout << str[i] <<'\n'; getchar(); return 0; }
demo中有涉及到冒泡算法和快排算法(未实现)。主要是回调函数的使用。

浙公网安备 33010602011771号