Mam problem z sortowaniem. Robię to funkcją qsort z Kerninghana.
Oto ona:
void qsort( double* v[], int left, int right)
{
int i, last;
void swap(double* v[], int i, int j);
if(left>= right)
return;
swap(v, left, (left + right)/2);
last = left;
for( i= left +1; i<= right;i++)
if(v[i]> v[left])
swap(v, ++last, i);
swap(v, left, last);
qsort(v, left, last -1);
qsort(v, last+1, right);
}
Mam strukturę o nazwie matrix_w
typedef struct {
double **q;
int wn;
int kn;
} matrix_w;
Jest ona zaimplementowana tymi dwoma funkcjami:
matrix_w *
read(FILE * p)
{
int n , m, i = 0, j; /* zmienne robocze */
matrix_w *a;
if (fscanf(p, "%d %d", &n, &m) != 2)
return NULL;
if ((a = makem(n, m)) == NULL)
return NULL;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
if ((fscanf(p, "%lf", a->q[j] + i)) != 1)
return NULL;
}
}
return a;
}
matrix_w *
makem(int lw, int lk)
{
int i;
matrix_w *nm = malloc(sizeof (*nm));
if (nm == NULL)
return NULL;
nm->wn = lw;
nm->kn = lk;
if ((nm->q = malloc(lw * sizeof (nm->q))) == NULL) {
free(nm);
return NULL;
}
for (i = 0; i < lw; i++)
nm->q[i] = malloc(lk * sizeof(nm->q[0]));
return nm;
}
W funkcji main piszę, więc tylko:
matrix_w* a = read( we);
Funkcje te poprawnie czytają z pliku np.
3 3
5 7 1
3 6 4
4 3 5
Moim zadaniem jest pozamieniać wiersze, sortując je według pierwszego elementu czyli powinno zamienić tą wczytaną macierz na:
3 3
5 7 1
4 3 5
3 6 4
W tym celu mamy tylko zamienić wskaźniki na pierwszy element wiersza, bo podobno kolejne elementy wiersza powinny być ustawione w tym samym miejscu pamięci na następnej pozycji. Ja jednak nie umiem tego zrobić. Proszę o pomoc, ew. o jakieś pytania jak czegoś nie sprecyzowałem.