在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。各药品的信息包括:药品编号、药名、药品单价、销出数量、销售额。药品编号共4位,采用字母和数字混合编号,如:A125,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采用多种排序法。对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。在本系统中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。 ,写出代码
时间: 2024-02-24 09:59:10 浏览: 158
以下是一个简单的示例代码,展示了如何使用不同的排序算法对药品信息进行排序:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
// 药品信息结构体
struct Drug {
string id; // 药品编号
string name; // 药品名称
double price; // 药品单价
int soldNum; // 销出数量
double soldAmount; // 销售额
};
// 按药品编号排序
bool cmpById(const Drug &a, const Drug &b) {
return a.id < b.id;
}
// 冒泡排序,按药品单价排序
void bubbleSortByPrice(vector<Drug> &drugs) {
int n = drugs.size();
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (drugs[j].price > drugs[j + 1].price) {
swap(drugs[j], drugs[j + 1]);
}
}
}
}
// 快速排序,按销售量排序
void quickSortBySoldNum(vector<Drug> &drugs, int left, int right) {
if (left >= right) return;
int i = left, j = right;
int pivot = drugs[left + (right - left) / 2].soldNum;
while (i <= j) {
while (drugs[i].soldNum > pivot) i++;
while (drugs[j].soldNum < pivot) j--;
if (i <= j) {
swap(drugs[i], drugs[j]);
i++;
j--;
}
}
quickSortBySoldNum(drugs, left, j);
quickSortBySoldNum(drugs, i, right);
}
// 堆排序,按销售额排序
void heapSortBySoldAmount(vector<Drug> &drugs) {
make_heap(drugs.begin(), drugs.end(), [](const Drug &a, const Drug &b) {
return a.soldAmount < b.soldAmount;
});
sort_heap(drugs.begin(), drugs.end(), [](const Drug &a, const Drug &b) {
return a.soldAmount < b.soldAmount;
});
}
int main() {
// 从数据文件中读取药品信息,存储在vector中
vector<Drug> drugs = {
{"A125", "药品1", 10.5, 100, 1050.0},
{"B233", "药品2", 5.5, 200, 1100.0},
{"C347", "药品3", 8.0, 150, 1200.0},
{"D498", "药品4", 12.0, 120, 1440.0},
{"E581", "药品5", 6.0, 180, 1080.0}
};
// 按药品编号排序
sort(drugs.begin(), drugs.end(), cmpById);
for (const auto &drug : drugs) {
cout << drug.id << " " << drug.name << " " << drug.price << " " << drug.soldNum << " " << drug.soldAmount << endl;
}
cout << endl;
// 冒泡排序,按药品单价排序
bubbleSortByPrice(drugs);
for (const auto &drug : drugs) {
cout << drug.id << " " << drug.name << " " << drug.price << " " << drug.soldNum << " " << drug.soldAmount << endl;
}
cout << endl;
// 快速排序,按销售量排序
quickSortBySoldNum(drugs, 0, drugs.size() - 1);
for (const auto &drug : drugs) {
cout << drug.id << " " << drug.name << " " << drug.price << " " << drug.soldNum << " " << drug.soldAmount << endl;
}
cout << endl;
// 堆排序,按销售额排序
heapSortBySoldAmount(drugs);
for (const auto &drug : drugs) {
cout << drug.id << " " << drug.name << " " << drug.price << " " << drug.soldNum << " " << drug.soldAmount << endl;
}
cout << endl;
return 0;
}
```
这个示例代码演示了如何使用STL中的sort函数对药品信息按药品编号进行排序,使用自定义函数和算法实现对药品单价、销售量和销售额的排序。同时,这个示例代码也展示了如何使用vector来存储药品信息,方便进行排序和遍历。
阅读全文