配列の代わりにベクトルを使用するマージソート方法を使用してテキストファイルをソートしようとしています。コードはビルドされますが、私がそれを実行すると、私のベクトルの一つにアウト・バウンド・エラーが発生します。具体的にベクトルを使用したマージソートC++
:
for (int k = start; k < end; k++)
{
if (L.at(x) <= R.at(y))
{
v.at(k) = L.at(x); // out of bounds
x++;
}
else
{
v.at(k) = R.at(y); // out of bounds
y++;
}
}
は私がint Kは依然として高にインクリメントまだベクトル 'V' をリサイズします。つまり、vの大きさは10になりますが、kは10にもなります。いくつかの値を変更しようとしましたが、コンパイルするたびにソートされません。私はさまざまなマージソートの方法を調べてきましたが、同じ範囲を超えて同じエラーが出るごとに、
編集:私は私のループに変更を加えました。今では私の機能を通過します。しかし、彼らは空のベクトルを返します。 'v'ベクトル全体は、それを印刷すると空白です。
全コード:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std
vector<string> readFile(string fileName) {
/* reads a textfile into vector. Works dandy. */
}
vector<string> merge(vector<string>& v, int start, int mid, int end) {
int n1 = mid - start + 1;
int n2 = end - mid;
vector<string> L;
vector<string> R;
L.resize(n1 + 1); // size left vector
R.resize(n2 + 1); // size right vector
for (int i = 1; i < n1; i++) {
L.at(i) = v.at(start + i - 1); // populate left vector
}
for (int j = 1; j < n2; j++) {
R.at(j) = v.at(mid + j); // populate right vector
}
int x = 1;
int y = 1;
for (int k = start; k < end; k++)
{
if (L.at(x) <= R.at(y))
{
v.at(k) = L.at(x); // merge left vector into v
if (x < L.size() - 1) // prevents x from increasing past bounds of L vector
x++;
}
else
{
v.at(k) = R.at(y); // merge right vector into v
y++;
}
return v;
}
vector<string> mergeSort(vector<string>& v, int start, int end) {
int middle;
if (start < end) // base case
{
middle = (start + end)/2; // find middle
mergeSort(v, start, middle); // divide vectors
mergeSort(v, middle + 1, end);
merge(v, start, middle, end); // merge sorted vectors
}
return v;
}
int main() {
vector<string> vectorReadIn;
vector<string> sortedVector;
int x = 0;
string fileName = "C:/Users/User/Downloads/Algorithims/Perm Words/perm15k.txt";
vectorReadIn = readFile(fileName); // reads file into vector
sortedVector = mergeSort(vectorReadIn, 1, vectorReadIn.size()); // calls mergesort
cout << "Sorted file:" << endl;
while (x < 8) {
cout << sortedVector.at(x);
x++;
}
}
[ビルドされた関数(または他の方法)を使用してC++で2次元配列をソートするか?](http://stackoverflow.com/questions/20931669/sort- a-2d-array-in-c-built-in-function-any-other-method) –
私の答えを見てください:http://stackoverflow.com/a/38249167/2642059あなたが探しているものは'sort(begin(vectorReadIn)、end(vectorReadIn))'です。 –
私は明確にすべきです、私はさまざまなソートアルゴリズムの複雑さを比較しています。そして、私はマージソートに固執しています。私はベクトルを使うことに決めました。 –