#include<stdio.h> struct student { char name[16];//name unsigned char age;//年龄 unsigned char score;//成绩 char classes[100];//班级 }; void swap(struct student st[] ,int length) { //这个地方可以写成struct student *st; 其实可以将结构体当成为数组进行操作 struct student tmp; int i, j; for (j = 0 ; j < length; j++) { for ( i = 1; i < length - j; i++) { if (st[i].age < st[i - 1].age) { tmp = st[i]; st[i] = st[i - 1]; st[i - 1] = tmp; } } } } int main() { struct student st[5]= { {"周永康",70,59,"C++基础班"},{"徐才厚",60,30,"JAVA班"},{"薄熙来",72,90,"PHP班"},{"令计划",50,32,"平面设计"},{"金三胖",30,78,"IOS系统"} }; int length = 5; swap(st,length); for (int i = 0; i < length; i++) { printf("姓名%s,年龄 = %d,成绩 = %d,班级 = %s ",st[i].name,st[i].age ,st[i].score,st[i].classes); } return 0; }
第二种方法
#include<stdio.h> struct student { char name[16];//name unsigned char age;//年龄 unsigned char score;//成绩 char classes[100];//班级 }; void swap(struct student* a, struct student* b) { struct student tmp; *a = *b; *b = tmp; } int main() { struct student st[5] = { {"周永康",70,59,"C++基础班"},{"徐才厚",60,30,"JAVA班"},{"薄熙来",72,90,"PHP班"},{"令计划",50,32,"平面设计"},{"金三胖",30,78,"IOS"} }; int length = 5; struct student tmp = st[0]; st[0] = st[1]; st[1] = tmp; int i, j; for (i = 0; i < length; i++) { for (j = 1; j < length - i; j++) { if (st[j].age < st[j - 1].age) { swap(&st[j], &st[j - 1]); } } } for (int i = 0; i < length; i++) { printf("姓名%s,年龄 = %d,成绩 = %d,班级 = %s ", st[i].name, st[i].age, st[i].score, st[i].classes); } return 0; }
这两种方法中,都用到的方法是将整个结构体看成是一个元素,就像是一个int型变量那样。通过比较了之后,然后再进行元素之间的交换。可以直接进行值之间的传递。相当于下面的这个类型变化的代码。在这上面的两个代码中,我提倡第二个代码,这个代码中
将交换的部分进行抽取了出来,这样有助于后面的使用,在后面的部分如果成绩相当,我们可以按照年龄进行排序,这个交换的部分我们可以直接进行调用swap这个函数就可以了。
void (int *a,int *b) { int c ; if(a>b) { c = a; a = b;b =c; } }