我正在尝试使用c ++中的向量从(Introduction to Algorithms(CLRS))实现Merge排序算法但是向量不是排序, 请帮忙,我哪里错了, 我试图通过参考使用呼叫 输入来自文本文件,其中包含新行
中的整数#include <iostream>
#include <fstream>
#include <vector>
#include <limits>
using namespace std;
void merge(vector<long>& A, long high, long mid, long low)
{
long n1,n2;
n1 = mid -low +1;
n2 = high - mid;
vector<long> L; //auxilarry array
vector<long> R; //auxilarry array
for(int i = low; i <= mid;i++)
{
L.push_back(A[i]);
}
for(int i = mid+1; i <= high;i++)
{
R.push_back(A[i]);
}
L.push_back(numeric_limits<int>::max());
R.push_back(numeric_limits<int>::max());
int i = 0, j = 0;
for(int k = low; k <= high; k++)
{
if(L[i]<=R[j])
{
A[k] = L[i];
i++;
}
else
{
A[k] = R[j];
j++;
}
}
}
void mergeSort(vector<long>& A, long low, long high)
{
long mid;
if(low < high)
{
mid = (high+low)/2 ;
mergeSort(A,low,mid);
mergeSort(A, mid+1,high);
merge(A,low, mid,high);
}
}
int main()
{
ifstream fin("Array.txt");
vector<long> array;
for(long i;fin>>i;)
{
array.push_back(i);
}
cout<<array.size();
mergeSort(array,0,array.size());
for(long i=0;i<array.size();i++)
{
cout<<array[i]<<endl;
}
return 0;
}
答案 0 :(得分:3)
您的合并功能声明为:
void merge(vector<long>& A, long high, long mid, long low)
你在mergesort中调用merge。
void merge(array, low, mid, high)
参数的排序是错误的。请参阅low
和high
变量排序