算法导论_第二章算法入门_合并排序

本文介绍了一个使用C++实现的合并排序算法,并详细展示了如何通过读取文本文件中的整数进行排序处理,最后将排序后的结果写入到另一个文件中。该程序涉及到了文件输入输出流、字符串流以及向量容器的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<vector>
#include<fstream>
#include<sstream>
using namespace std;

//读入文件
void inputFile(vector<int>& vec)
{
 int number;
    string inputfile;
 cin>>inputfile;
    ifstream in(inputfile.c_str());
    for(string line; getline(in, line); )
 {
  istringstream sin(line);
  for(; sin>>number; )
  {
   vec.push_back(number);
  }
 }
}

//合并程序
void merge(vector<int>& vec, int p, int r, int q)
{
 int n1, n2, k, i, j;
 n1 = r - p + 1;
 n2 = q - r;
 vector<int> vec1(n1+2), vec2(n2+2);
    for(i=1; i <= n1; i++)
 {
  vec1[i] = vec[p+i-1];
 }
 for(j=1; j <= n2; j++)
 {
  vec2[j] = vec[r+j];
 }
 //这个是作为哨兵
 vec1[n1+1] = 1<<30;
 vec2[n2+1] = 1<<30;
 i = 1;
 j = 1;
 for(k=p; k <= q; k++)
 {
        if(vec1[i] < vec2[j])
  {
   vec[k] = vec1[i];
   i++;
  }
  else
  {
   vec[k] = vec2[j];
   j++;
  }
 }
}

//合并排序算法
void mergeSort(vector<int>& vec, int p, int q)
{
 if(p < q)
 {
  int r = (p + q) / 2;
  mergeSort(vec, p, r);
  mergeSort(vec, r+1, q);
  merge(vec, p, r, q);
 }
}

//输出排序后的内容
void outputFile(vector<int>& vec)
{
 ofstream out("outputfile.txt");
 for(int i=1; i <= vec.size() - 1; i++)
 {
        out<<vec[i]<<" ";
 }
}

int main()
{
 vector<int> vec;
    vec.push_back(-1);
 inputFile(vec);
 mergeSort(vec, 1, vec.size()-1);
    outputFile(vec);
 return 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值