我正在尝试使用c ++中的向量从(算法简介(CLRS))实现合并排序算法,但向量未排序,请帮忙,我哪里出错了,我试图通过引用使用call
输入来自一个文本文件,在新行中包含整数
#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;
}
您的合并功能声明为:
void merge(vector<long>& A, long high, long mid, long low)
您正在通过mergesort内部调用merge。
void merge(array, low, mid, high)
参数的顺序是错误的。查看low
和high
变量排序
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句