You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:15:03