stlライブラリを使用してマージソートアルゴリズムを作成しようとしていますが、いくつか問題があります。以下は私が使用しているコードです
template <typename Item, typename SizeType>
void merge_sort(Item array[], SizeType size){
size_t n1; //Size of the first subarray
size_t n2; //Size of the second subarray
if(size > 1){
//Compute the size of the subarrays
n1 = size/2;
n2 = size - n1;
//create the temp array.
int* n1Temp = new int[n1];
int* n2Temp = new int[n2];
int i;
for(i = 0; i < n1; i++)
n1Temp[i] = array[i];
for(i = 0; i < n2; i++)
n2Temp[i] = array[i + n1];
//recursive calls
merge_sort(n1Temp, n1);//sort from array[0] through array[n1 - 1]
merge_sort(n2Temp, n2);//sort from array[n1] to the end
//Merge the two sorted halves.
vector<int> v(array, array + size);
merge(n1Temp, n1Temp + n1, n2Temp, n2Temp + n2, v.begin());
copy(v.begin(), v.end(), array);//copy the vector back to the array
delete[] n1Temp;
delete[] n2Temp;
}
}
コードは正常にソートされますが、問題は、マージソート呼び出しごとにベクトルが作成されるため、O(n \ log n)ではなくO(n ^ 2)アルゴリズムのように動作することです(私は思います)。ベクトルを削除して、以下に示すマージ関数で配列を使用してみました
//Merge the two sorted halves.
int* finalArray = new int[n1 + n2];
merge(n1Temp, n1Temp + n1, n2Temp, n2Temp + n2, begin(finalArray));
array = finalArray;
しかし、これは私にエラー以外の何物も与えません。マージソートアルゴリズムを救済するためにできることはありますか?