Witam,
Mam pytanie odnośnie sortowania metoda shella. Napisałem program i ma on posortować każdy element wiersza osobno. Jest taki problem, że program owszem sortuje wierszami ale leci bez przerwy od początku do końca. Mógłby ktoś wytłumaczyć o co chodzi i w czym jest błąd. Tablica jest 10x10.
#include <stdio.h>
#include <stdlib.h>
void sortowanie(int *tab,int N)
{
int h,i,j,x;
//wartosc poczatkowego przesuniecia
for(h =1; h<N; h=3*h+1);
h=h/9;
// Proces sortowania
while(h)
{
for(j=N-h-1; j>=0; j--)
{
x=tab[j];
i=j+h;
while((i<N)&&(x>tab[i]))
{
tab[i-h]=tab[i];
i+=h;
}
tab[i-h]=x;
}
h/=3;
}
}
int main()
{
int w=10,k=10,d[w][k];
int i,j,t2[100];
FILE *dane,*wynik;
dane=fopen("macierz.txt", "r");
wynik=fopen("wyniki77.txt","w");
printf("Macierz wczytana z pliku\n");
for (i=0; i<w; i++)
{
for(j=0; j<k; j++)
{
fscanf(dane,"%d",&d[i][j]);
printf("%5d",d[i][j]);
}
printf("\n");
}
printf("\n\n");
fclose(dane);
//--------------
//zamiana tablicy dwuwymiarowej na jednowymiarowa
int t = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
t2[t]=d[i][j];
t++;
}
}
//-----------------------
//sortowanie(d,100); //nie sortuje tablicy jedoelementowej
//-------------------
//zamiana tablicy jendowymiarowej na dwuwymiarowa
t = 0;
for(i=0; i< 10; i++)
{
for(j=0; j < 10; j++)
{
d[i][j] = t2[t];
t++;
}
}
//-----------------------------------
sortowanie(d,100);
//-----------------------------------
//Wyświetlenie posortowanej tablicy
for(i=0; i<w; i++)
{
for(j=0; j<k; j++)
{
printf("%5d",d[i][j]);
}
printf("\n");
}
fclose(wynik);
return 0;
}