Witam serdecznie!
Próbuję napisać merge sorta. Dane pobiera z pliku tekstowego, do tablicy dwuwymiarowej. Ma sortować według zadanej kolumny wszystkie wiersze. Niestety w którymś miejscu robie błąd i nie mogę go odkopać :/ Na potrzeby testowe przyjąłem tablice 4x4 i 1 kolumne do posortowania. Proszę o pomoc!
Poniżej kod
#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <vector>
#include <fstream>
#include <cmath>
using namespace std;
vector< vector<int> > vec;
vector<int> row; // Create an empty row
int tmp = 0;
std::fstream plik;
int tab_pom[10][10];
void merge(int start,int end,int middle){
for(int a = 0 ; a < 4 ; a++){
for(int b = 0 ; b <4 ; b++)
{
tab_pom[a][b] = vec[a][b];
//cout << " vec " << vec[a][b] << " tabpom " << tab_pom[a][b] << endl;
}
}
int i = start, j = middle + 1, k = 0;
cout << "-------------------------------" << endl;
cout << "start = " << start << " middle= " << middle << " end = " << end << endl;
cout << "-------------------------------" << endl;
while (i <= middle && j <= end)
{
if (vec[j][1] < vec[i][1])
{
for(int t=0; t<4; t++){
tab_pom[k][t] = vec[j][t];
}
j++;
}
else
{
for(int t=0; t<4; t++){
tab_pom[k][t] = vec[i][t];
}
i++;
}
k++;
}
if (i <= middle)
{
while (i <= middle)
{
for(int t=0; t<4; t++){
tab_pom[k][t] = vec[i][t];
//cout << tab_pom[k][t] << endl;
}
//cout << endl;
i++;
k++;
}
}
else
{
while (j <= end)
{
for(int t=0; t<4; t++){
tab_pom[k][t] = vec[j][t];
//cout << tab_pom[k][t] << endl;
}
//cout << endl;
j++;
k++;
}
}
for(int a = 0 ; a < end-start ; a++){
for(int b = 0 ; b <4 ; b++)
{
vec[a][b] = tab_pom[a][b];
//cout << " vec " << vec[a][b] << " tabpom " << tab_pom[a][b] << endl;
}
}
cout << "vec tab" << endl;
for(int t = 0 ; t<4; t++){
for(int x = 0 ; x<4; x++){
cout << vec[t][x] << " ";
}
cout << endl;
}
cout << "pom tab" << endl;
for(int t = 0 ; t<4; t++){
for(int x = 0 ; x<4; x++){
cout << tab_pom[t][x] << " ";
}
cout << endl;
}
}
void mergeSort(int start, int end){
int middle;
if (start != end){
middle = ((start + end)/2);
mergeSort(start,middle);
mergeSort(middle+1,end);
merge(start,end,middle);
}
}
int main(int argc, char *argv[])
{
plik.open( "wejscie.txt", std::ios::in | std::ios::out );
if( plik.good() == true )
{
// wpisanie liczb do tablicy
while (!plik.eof())
{
if(plik.peek() == '\n'){
vec.push_back(row);
row.clear(); // Create an empty row
plik >> tmp;
row.push_back(tmp);
}else{
plik >> tmp;
row.push_back(tmp);
}
}
}
vec.push_back(row);
mergeSort(0, vec.size()-2);
system("PAUSE");
return EXIT_SUCCESS;
}