文件中有一整数数组,要求排序后输出到另一文件(C++)

好久没有用到C++的容器方面了,再加上它的文件对象的处理也是一个陌生的点,这道题可以有效的复习一下子这些知识点,还有就是排序算法。

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void Sort(vector<int> &data)
{
	for(int i=1; i < data.size(); i++)
	{
		int tmp = data[i];
		for(int j=i-1; j>=0 && tmp < data[j]; j--)
			data[j+1] = data[j];
		data[j+1] = tmp;
	}
}

int main()
{
	void Sort(vector<int> &data);

	ifstream in("data.txt");
	if(!in)
	{
		cout << "file error" << endl;
		exit(1);
	}

	int tmp;
	vector<int> data;
	while(!in.eof())
	{
		in>>tmp;
		data.push_back(tmp);
	}
    
	Sort(data);

	ofstream out("result.txt");
	if(!out)
	{
		cout << "file error!" << endl;
		exit(1);
	}

	for(vector<int>::iterator it=data.begin(); it != data.end(); it++)
		out << *it << " ";

	out.close();
	return 0;
}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于包含20000个整数数组,基数排序是一个有效的排序算法。以下是使用基数排序对一个包含20000个整数数组进行从小到大和从大到小排序的示例代码: ```cpp #include <iostream> #include <vector> #include <algorithm> const int MAX_DIGITS = 5; // 数字的最大位数 // 获取数字的某个位上的值 int getDigit(int num, int digit) { for (int i = 0; i < digit - 1; i++) { num /= 10; } return num % 10; } // 基数排序 void radixSort(std::vector<int>& data, bool ascending) { int maxNum = *std::max_element(data.begin(), data.end()); // 获取最大值 int digitNum = 1; // 位数 while (maxNum > 10) { maxNum /= 10; digitNum++; } std::vector<std::vector<int>> buckets(10); // 桶数组 std::vector<int> temp(data.size(), 0); // 临时数组 for (int d = 1; d <= digitNum; d++) { // 将数据分配到桶 for (int i = 0; i < data.size(); i++) { int digit = getDigit(data[i], d); buckets[digit].push_back(data[i]); } // 将桶的数据按顺序放回数组 int index = 0; if (ascending) { for (int i = 0; i < 10; i++) { for (int j = 0; j < buckets[i].size(); j++) { data[index++] = buckets[i][j]; } buckets[i].clear(); } } else { for (int i = 9; i >= 0; i--) { for (int j = 0; j < buckets[i].size(); j++) { data[index++] = buckets[i][j]; } buckets[i].clear(); } } } } int main() { std::vector<int> data(20000); // 创建包含20000个整数数组 // 填充数组 for (int i = 0; i < 20000; i++) { data[i] = rand() % 100000; } // 从小到大排序 radixSort(data, true); std::cout << "Sorted in ascending order:\n"; for (int i = 0; i < 20000; i++) { std::cout << data[i] << " "; } std::cout << "\n"; // 从大到小排序 radixSort(data, false); std::cout << "Sorted in descending order:\n"; for (int i = 0; i < 20000; i++) { std::cout << data[i] << " "; } std::cout << "\n"; return 0; } ``` 在上述示例代码,我们创建了一个包含20000个随机整数数组。然后,我们调用 `radixSort` 函数对数组进行从小到大排序,并输出排序结果。接着,我们再次调用 `radixSort` 函数对数组进行从大到小排序,并输出排序结果。 请注意,示例代码排序结果直接输出到控制台。如果您想将排序结果保存到文件,请使用文件流进行相应的操作。 希望这能帮到您!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值