采用C++算法读取txt中的数据采用基数排序从小到大和从大到小排序
时间: 2024-04-21 10:22:26 浏览: 103
您好!您可以使用C++编写以下算法来读取txt中的数据并进行基数排序,排序结果可以选择从小到大或从大到小。
```cpp
#include <iostream>
#include <fstream>
#include <vector>
// 获取某个数字的第n位数字
int getDigit(int number, int n) {
for (int i = 0; i < n; i++) {
number /= 10;
}
return number % 10;
}
// 基数排序函数
void radixSort(std::vector<int>& arr, bool ascending) {
if (arr.empty()) {
return;
}
// 找到待排序数组中最大值
int maxVal = arr[0];
for (int i = 1; i < arr.size(); i++) {
if (arr[i] > maxVal) {
maxVal = arr[i];
}
}
// 计算最大值的位数
int numDigits = 0;
while (maxVal > 0) {
maxVal /= 10;
numDigits++;
}
// 初始化桶
std::vector<std::vector<int>> buckets(10);
// 进行每一位的桶排序
for (int digit = 0; digit < numDigits; digit++) {
// 将数组中的元素按照当前位放入对应的桶中
for (int i = 0; i < arr.size(); i++) {
int bucketIdx = getDigit(arr[i], digit);
buckets[bucketIdx].push_back(arr[i]);
}
// 根据排序顺序和当前位将桶中的元素重新放回数组
int arrIdx = 0;
if (ascending) {
for (int i = 0; i < buckets.size(); i++) {
for (int j = 0; j < buckets[i].size(); j++) {
arr[arrIdx++] = buckets[i][j];
}
buckets[i].clear();
}
} else {
for (int i = buckets.size() - 1; i >= 0; i--) {
for (int j = 0; j < buckets[i].size(); j++) {
arr[arrIdx++] = buckets[i][j];
}
buckets[i].clear();
}
}
}
}
int main() {
std::ifstream inputFile("data.txt"); // 假设数据存放在名为data.txt的文件中
std::vector<int> data;
int num;
while (inputFile >> num) {
data.push_back(num);
}
inputFile.close();
// 从小到大排序
radixSort(data, true);
std::cout << "从小到大排序结果:" << std::endl;
for (int i = 0; i < data.size(); i++) {
std::cout << data[i] << " ";
}
std::cout << std::endl;
// 从大到小排序
radixSort(data, false);
std::cout << "从大到小排序结果:" << std::endl;
for (int i = 0; i < data.size(); i++) {
std::cout << data[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
以上代码将从名为`data.txt`的文件中读取数据,并使用基数排序算法将数据从小到大和从大到小进行排序。您可以根据实际需求修改文件名和路径,并根据需要选择排序顺序。注意,代码假设数据文件中每行只有一个整数。
希望对您有所帮助!如有任何疑问,请随时提问。
阅读全文