如何将C++中的If Else语句替换为循环实现图书排序?
用循环替代If Else实现图书数量排序
当然可以用循环实现的排序算法来替代原本的If Else逻辑,完成图书按数量升序/降序的需求。新手最容易理解的就是冒泡排序——完全基于循环实现,还能通过简单的条件判断切换升序/降序规则。
下面给你一个完整的示例实现:
1. 先定义图书的结构体
首先我们需要一个结构体来存储图书的科目、名称和数量:
#include <iostream> #include <string> #include <vector> using namespace std; // 定义图书结构体 struct Book { string subject; string name; int count; };
2. 用循环实现冒泡排序函数
这里用两层循环实现冒泡排序,通过一个布尔参数isAscending来控制升序还是降序:
// 按图书数量排序的函数,isAscending为true时升序,false时降序 void sortBooksByCount(vector<Book>& books, bool isAscending) { int n = books.size(); // 外层循环:控制排序的轮数 for (int i = 0; i < n - 1; ++i) { // 内层循环:每轮比较相邻元素,把最大/最小的元素"冒"到末尾 for (int j = 0; j < n - i - 1; ++j) { // 根据排序方向判断是否需要交换 if ((isAscending && books[j].count > books[j+1].count) || (!isAscending && books[j].count < books[j+1].count)) { // 交换两个图书对象 swap(books[j], books[j+1]); } } } }
3. 测试示例
接下来写一个简单的主函数模拟图书馆系统的流程:
// 打印图书列表的函数 void printBooks(const vector<Book>& books) { cout << "\n当前图书列表(带数量):" << endl; for (const auto& book : books) { cout << "科目:" << book.subject << ",书名:" << book.name << ",数量:" << book.count << endl; } } int main() { // 模拟某一科目的图书数据 vector<Book> computerBooks = { {"计算机", "C++ Primer", 5}, {"计算机", "Python编程从入门到精通", 12}, {"计算机", "数据结构与算法分析", 3}, {"计算机", "操作系统原理", 7} }; cout << "=== 未排序的计算机类图书 ===" << endl; printBooks(computerBooks); int choice; cout << "\n请选择排序方式:1-升序(数量少到多) 2-降序(数量多到少)" << endl; cin >> choice; // 根据选择调用排序函数,这里的简单判断是处理用户输入,核心排序逻辑已用循环实现 if (choice == 1) { sortBooksByCount(computerBooks, true); cout << "\n=== 按数量升序排序后的结果 ===" << endl; } else if (choice == 2) { sortBooksByCount(computerBooks, false); cout << "\n=== 按数量降序排序后的结果 ===" << endl; } else { cout << "\n无效选择,退出程序" << endl; return 0; } printBooks(computerBooks); return 0; }
关键说明
- 原本如果是用If Else手动处理排序逻辑(比如逐个判断元素大小),现在完全用两层循环的冒泡排序替代,逻辑更清晰,扩展性更强(比如以后加其他排序规则也方便)。
- 排序函数里的核心逻辑都是循环:外层循环控制排序轮次,内层循环负责相邻元素的比较和交换,通过
isAscending参数切换升序/降序的判断条件。 - 如果你原本的If Else是用来处理用户排序选择的(比如判断选升序还是降序),那这部分的简单判断是必要的,但排序的核心逻辑已经换成循环实现了——这完全符合你的需求。
内容的提问来源于stack exchange,提问作者Newbies
相关产品推荐
相关产品推荐

