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;
}