43. 为基本排序函数加上回调功能,练习回调函数,

 

//在基本的选择排序函数的基础之上,加上回调机制,实现回调函数


//旧方式
#include <stdio.h>
void selectSortByUp(int *p,int n)//从小到大排序
{
    int i,j;
    for(i = 0;i<n-1;i++)
    {
        for(j = i+1;j<n;j++)
        {
            if(p[i] > p[j])
            {
                p[i] = p[i]^p[j];
                p[j] = p[i]^p[j];
                p[i] = p[i]^p[j];
            }
        }
    }
}

void selectSortByDown(int *p,int n)//从大到小排序
{
    int i,j;
    for(i = 0;i<n-1;i++)
    {
        for(j = i+1;j<n;j++)
        {
            if(p[i] < p[j])
            {
                p[i] = p[i]^p[j];
                p[j] = p[i]^p[j];
                p[i] = p[i]^p[j];
            }
        }
    }
}


int main(void)
{
    int arr[10] = {6,5,4,3,2,1,7,8,9,0};
    int i;
    selectSortByDown(arr,10);
    for(i= 0;i<10;i++)
    {
        printf("%d\n",arr[i]);
    }
    putchar(10);

    selectSortByDown(arr,10);
    for(i= 0;i<10;i++)
    {
        printf("%d\n",arr[i]);
    }
    putchar(10);
    return 0;
}

 

 

 

添加回调接口,实现回调函数。

#include <stdio.h>

int callBackCompare(int a,int b)
{
    return a<b?1:0; //return a>b?1:0;
}

void selectSort(int *p,int n,int(*pf)(int,int))//从大到小排序
{
    int i,j;
    for(i = 0;i<n-1;i++)
    {
        for(j = i+1;j<n;j++)
        {
            if(pf(p[i],p[j]))
            {
                p[i] = p[i]^p[j];
                p[j] = p[i]^p[j];
                p[i] = p[i]^p[j];
            }
        }
    }
}

int main(void)
{
    int arr[10] = {6,5,4,3,2,1,7,8,9,0};
    int i;
    selectSort(arr,10,callBackCompare);
    for(i= 0;i<10;i++)
    {
        printf("%d\n",arr[i]);
    } 
    putchar(10); 
    
    return 0;
}

 

//与上面这个对比一下,下面的为普通的间接调用。

#include <stdio.h>
int callBackCompare(int a,int b)
{
    return a<b?1:0;
}
void selectSort(int *p,int n)//从大到小排序
{
    int i,j;
    for(i = 0;i<n-1;i++)
    {
        for(j = i+1;j<n;j++)
        {
            if(callBackCompare(p[i],p[j]))
            {
                p[i] = p[i]^p[j];
                p[j] = p[i]^p[j];
                p[i] = p[i]^p[j];
            }
        }
    }
}

int main(void)
{
    int arr[10] = {6,5,4,3,2,1,7,8,9,0};
    int i;
    selectSort(arr,10);
    
    return 0;
}

 

posted @ 2018-08-21 16:31  2018年8月10日注册  阅读(223)  评论(0编辑  收藏  举报