Witam. Mam do napisania program sortujący wiersze macierzy metodą Shella od wyrazu najmniejszego do największego. Napisałem już początek i zamieniłem macierz 10x10 na tablice jednowymiarowe a pózniej dodałem kod z sortowania Shella. Na koniec zamieniam to znowu na dwuwymiarową i wyświetlam w konsoli. Niby nic trudnego, program nie zawiera błędów, a jednak na czymś sie sypie :p Dokładniej w konsoli pokazuje same zera w macierzy. A przed chwilą sprawdzałem, że w tablica[j]
są wartości posortowane. To czemu nie pokazuje mi tej zamienionej macierzy ?
#include<fstream>
#include<iostream>
#include<iomanip>
#include<conio.h>
using namespace std;
int main()
{
const int n=10, m=10; //wymiary macierzy
int M[n][m]; //deklaracja macierzy
int tablica[100];
int h,i,j,x;
fstream file;
//------------------------------------------------------------------
//odczytanie macierzy z pliku tekstowego
file.open("macierz_do_sortowania.txt",ios_base:: in);
for (int i=0;i<n;i++)
for (int j=0; j<m; j++)
file>>M[i][j];
file.close();
//------------------------------------------------------------------
//Przejœcie z tablicy dwuwymiarowej do jednowymiarowej
int t = 0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
tablica[t] = M[i][j];
t++;
}
}
//-----------------------------------------------------------------
//Wyznaczamy wartoœæ pocz¹tkowego przesuniêcia
for(h = 1; h < 100; h = 3 * h + 1);
h /= 9;
if(!h) h++; // istotne dla ma³ych N, dla wiêkszych mo¿na pomin¹æ!
//-----------------------------------------------------------------
//Sortujemy
while(h)
{
for(j = 100 - h - 1; j >= 0; j--)
{
x = tablica[j];
i = j + h;
while((i < 100) && (x > tablica[i]))
{
tablica[i - h] = tablica[i];
i += h;
}
tablica[i - h] = x;
}
h /= 3;
}
//------------------------------------------------------------------
//Przejœcie z tablicy dwuwymiarowej do jednowymiarowej
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
M[i][j] = tablica[x];
t++;
}
}
//------------------------------------------------------------------
// Wyœwietlamy wynik sortowania
cout << "Po sortowaniu:"<< endl;
for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++)
cout << setw(10) << M[i][j];
cout << endl;
return 0;
}