[C] Sortowanie pojedynczych wierszy tablicy dwuwymiarowej

pawwach
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 10 sty 2011, o 20:44
Płeć: Mężczyzna
Lokalizacja: Kamienica/Kraków
Podziękował: 1 raz

[C] Sortowanie pojedynczych wierszy tablicy dwuwymiarowej

Post autor: pawwach »

Witam,

Mam następujący fragment programu:

Kod: Zaznacz cały

int generuj_dane(int typ, int ilosc, char nazwapliku[51]){
    int i, j, tab[P][ilosc];
    double x;

    for (i=0; i<P; i++){
        for (j=0; j<ilosc; j++){
            x = (double)rand()/RAND_MAX*200-100;
            tab[i][j] = (int)x;
        }            
    }

    for (i=0; i<P; i++){
        rosnaco(*tab[i][], 0, ilosc-1);
    }     

    return 1;    
}

void rosnaco(int *tab, int p, int k){
     int i=p, j=k, s, pom;
     s=(i+j)/2;
     do {
         while(tab[i]<tab[s]) i++;
         while(tab[j]>tab[s]) j--;
         if (i<=j){
                   pom=tab[i];
                   tab[i]=tab[j];
                   tab[j]=pom;
                   i++;
                   j--;
                   }
         } while (i<=j);
     if (j>p) rosnaco(tab,p,j);
     if (i<k) rosnaco(tab,i,k);
}
Jak łatwo się domyślić, chciałbym, aby funkcja rosnaco posortowała mi poszczególne wiersze tablicy dwuwymiarowej (przy czym P jest zdefiniowane i wynosi 10). Niestety, wskaźniki nie są moją mocną stroną i program nie działa. Ktoś ma jakiś pomysł, jak to poprawić?
Awatar użytkownika
argv
Użytkownik
Użytkownik
Posty: 569
Rejestracja: 27 maja 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 51 razy
Pomógł: 66 razy

[C] Sortowanie pojedynczych wierszy tablicy dwuwymiarowej

Post autor: argv »

Nie wymyślać koła od nowa i użyć qsort:

Kod: Zaznacz cały

#include <stdio.h>#include <stdlib.h>#define N   3#define M   5void wypisz(int tab[N][M]){    int i, j;        for(i = 0; i < N; i++) {        for(j = 0; j < M; j++)            printf("%d ", tab[i][j]);        printf("
");    }}int compare (const void * a, const void * b){  return ( *(int*)a - *(int*)b );}int main(int argc, char *argv[]){    int tab[N][M] = {{5,3,4,2,4}, {9,6,7,3,2}, {4,2,3,1,7}};    int i = 0;        for(i = 0; i < N ;i++) {        qsort(tab[i], M, sizeof(int), compare);    }        wypisz(tab);      system("PAUSE");        return 0;} 
pawwach
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 10 sty 2011, o 20:44
Płeć: Mężczyzna
Lokalizacja: Kamienica/Kraków
Podziękował: 1 raz

[C] Sortowanie pojedynczych wierszy tablicy dwuwymiarowej

Post autor: pawwach »

Chciałoby się, ale tematem zadania jest właśnie ręczne użycie quicksorta.
Awatar użytkownika
argv
Użytkownik
Użytkownik
Posty: 569
Rejestracja: 27 maja 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 51 razy
Pomógł: 66 razy

[C] Sortowanie pojedynczych wierszy tablicy dwuwymiarowej

Post autor: argv »

W takim razie co za problem zgooglac Qsort w C ?
Ponizej copy-paste z mojej podrecznej biblioteczki:

Kod: Zaznacz cały

void zamien(int *tab, int i, int j){    int tmp = tab[i];    tab[i] = tab[j];    tab[j] = tmp;} void quick_sort(int *tab, int lewy, int prawy){    int i = lewy;    int j = prawy;    int x = tab[(lewy + prawy) / 2];        do {        while((tab[i] < x) && (i < prawy)) i++;        while((x < tab[j]) && (j > lewy)) j--;                if(i <= j) zamien(tab, i++, j--);    } while (i <= j);        if(lewy < j) quick_sort(tab, lewy, j);    if(i < prawy) quick_sort(tab, i, prawy);}void quicksort(int *tab, int size){    quick_sort(tab, 0, size - 1);} 
ODPOWIEDZ