回调函数(二)

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中有涉及到冒泡算法和快排算法(未实现)。主要是回调函数的使用。

posted @ 2019-05-18 22:41  N_zero  阅读(199)  评论(0)    收藏  举报