用函数调用实现冒泡函数与函数指针的使用

本人新手,有错误请多多指点!

#include <stdio.h>
#include <stdlib.h>
struct Student{  //创建一个结构体,结构体中定义两个int类型的成员
    int  age;
    int score;
};

typedef struct Student student;//给结构体起别名

typedef int (*ComparePtr_t)(student *s1,student *s2);//定义一个函数指针,并且给函数指针起别名

int compareAge(student *s1,student *s2)//定义外部函数,实现其功能
{
    return (s1->age)-(s2->age);
}

int compareScore(student *s1,student *s2)
{
    return (s1->score)-(s2->score);
}

void Bust(student *array,int number_of_elements,ComparePtr_t comparefunc)//算法
{
    int iter,swapped;
    student temp;
    do{
        swapped=0;
        for (iter=1; iter<number_of_elements; iter++) {
            if (comparefunc(&array[iter-1],&array[iter])<0) {
                temp=array[iter-1];
                array[iter-1]=array[iter];
                array[iter]=temp;
                swapped=1;
            }
        }
    
    }while (swapped);
    
}
int main(int argc, const char * argv[]) {
    student array[5]={{5,1},{3,8},{7,2},{6,4},{2,3}};
    Bust(array,5, compareAge);
    for (int iter=0; iter<5; iter++) {
        printf("age:%d score:%d\n",array[iter].age,array[iter].score);
    }
    printf("\n");
    return 0;
}
下面说说函数指针的作用:实现同一功能的多个模块统一起来标识,这样一来更容易后期的维护,系统结构更加清晰。

其运算结果为:

age:7 score:2
age:6 score:4
age:5 score:1
age:3 score:8
age:2 score:3

posted @ 2015-03-26 17:38  谭平江  阅读(225)  评论(0)    收藏  举报