首页 > 代码库 > 代码案例(结构体,函数指针,指针函数,冒泡排序)

代码案例(结构体,函数指针,指针函数,冒泡排序)

typedef struct
{
    char name[20];
    int age;
    float score;
}Stu;
#import <Foundation/Foundation.h>
//姓名升序
void sortByName(Stu *p , int count )
{
    for (int i = 0 ; i < count -1; i ++) {
        for (int j= 0 ; j < count -1-i; j ++) {
            if (strcmp((p + j)->name, (p + j + 1)->name) > 0 ) {
                Stu temp  = *(p + j);
                *(p + j) = *(p + j + 1);
                *(p + j + 1) = temp;
            }
        }
    }
    
}
//年龄
void sortByAge( Stu *p , int count )
{
    for (int i = 0 ; i < count -1; i ++) {
        for (int j= 0 ; j < count -1-i; j ++) {
            if ((p + j)->age > (p + j + 1)->age) {
                Stu temp  = *(p + j);
                *(p + j) = *(p + j + 1);
                *(p + j + 1) = temp;
            }
        }
    }

}
//成绩
void sortByScore(Stu *p , int count )
{
    for (int i = 0 ; i < count -1; i ++) {
        for (int j= 0 ; j < count -1-i; j ++) {
            if ((p + j)->score > (p + j+ 1)->score ) {
                Stu temp  = *(p + j);
                *(p + j) = *(p + j + 1);
                *(p + j + 1) = temp;
            }
        }
    }

}

void outPut(Stu *p , int count )
{
    for (int i = 0 ; i < count ; i ++) {
        printf("name = %s , age = %d , score = %.2f\n" , (p + i)->name,(p + i)->age , (p + i)->score);
    }
    
}
typedef void (*FUN) (Stu *p , int count);
void student (FUN func ,Stu *p , int count )
{
    func(p , count);
}
int main(int argc, const char * argv[])
{
    Stu stu[5] = {
        {"zhang",20,80},
        {"wang", 22,82},
        {"li",23,86},
        {"zhao",22,83},
        {"liu",20,89}
    };
    
    Stu *p = NULL;
    p = stu;
    student(outPut,p,5);
    student(sortByName,p, 5);
    student(outPut,p,5);
   // outPut(p, 5);
   // sortByName(p, 5);
  //  outPut(p, 5);
       return 0;
}