我试图使用c ++中的向量从(Introduction to Algorithms(CLRS))实现Merge排序算法,但是数组没有排序,

时间:2016-10-08 12:28:10

标签: c++ algorithm sorting

我正在尝试使用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;
}

1 个答案:

答案 0 :(得分:3)

您的合并功能声明为:

void merge(vector<long>& A, long high, long mid, long low)

你在mergesort中调用merge。

void merge(array, low, mid, high)

参数的排序是错误的。请参阅lowhigh变量排序