#include <stdio.h> typedef struct { char bn[50]; int price; } book; int main() { int i, n, m; scanf("%d",&n); book bookn[n+1], k; //构造book类型结构数组(一般编译器都会报错,因为n不是常量); for (i = 0; i < n; i++) { //存储书目; scanf("%s %d", bookn[i].bn, &bookn[i].price); } //按照排序方法直接以price排序各数组元素 //假设最坏情况,刚好各元素都是降序排列 for (i = 0; i < n; i++) { //第一个for是从每次更新的数组的首元素开始左右互换,假设最坏情况每次首元素都是本轮最大的,需要丢到最后去 for (m = 0; m < n - i-1; m++) { //m=n-i是因为每轮最大的丢到最后总会比上一轮最大的小,在上一轮最大的前面换不动了,所以只需要比上轮少换一次 //比较price 成员 if (bookn[m].price > bookn[m + 1].price) { k = bookn[m]; bookn[m] = bookn[m + 1]; bookn[m+1] = k; } } } //用for循环输出排序后的数组元素即可 for (i = 0; i <n; i++) printf("%s\n", bookn[i].bn); return 0; }