如何不调用sort函数实现读取文件数字并交替写入两个升序文件
不使用标准库sort函数的实现方案
你可以通过手动实现排序算法替换标准库的sort函数调用即可完成需求,以下是适配你原有逻辑的完整实现,采用易理解的选择排序完成升序排序:
#include <fstream> #include <iostream> using namespace std; int main() { const int n = 10; int *a = new int[n]; ifstream f("numbers.txt"); ofstream g("AscNum1.txt"); ofstream h("AscNum2.txt"); // 先判断文件是否正常打开 if (!f.is_open() || !g.is_open() || !h.is_open()) { cout << "文件打开失败" << endl; delete[] a; return 1; } // 读取数字 for (int i = 0; i < n; i++) { f >> a[i]; } // 自定义选择排序实现升序,替换原来的sort调用 for (int i = 0; i < n - 1; i++) { int min_idx = i; for (int j = i + 1; j < n; j++) { if (a[j] < a[min_idx]) { min_idx = j; } } // 交换当前位置和最小元素的位置 int temp = a[i]; a[i] = a[min_idx]; a[min_idx] = temp; } // 交替写入两个文件,逻辑和你原来的保持一致 for (int i = 0; i < n; i++) { if (i % 2 == 0) { g << a[i] << ' '; } else { h << a[i] << ' '; } } // 资源释放 h.close(); g.close(); f.close(); delete[] a; return 0; }
改动说明
- 移除了原代码中无用的
ctime头文件和srand随机数初始化逻辑,你原有需求不需要用到随机数相关功能 - 替换标准库
sort为自定义实现的选择排序,无需引入algorithm头文件 - 修正了原代码不符合C++标准的
void main写法为标准的int main - 新增了文件打开失败的判断逻辑,避免异常场景下的程序运行错误
- 补充了动态数组的内存释放,避免内存泄漏
如果你偏好其他排序实现,也可以替换为冒泡排序等其他升序排序逻辑,核心排序部分替换为以下代码即可:
// 冒泡排序实现升序 for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (a[j] > a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } }
以上两种实现都可以达到和原sort调用完全一致的排序效果,后续交替写入文件的逻辑和你原有逻辑保持一致,运行结果符合你给出的示例要求。
内容的提问来源于stack exchange,提问作者shameeslav
相关产品推荐
相关产品推荐

