PDA

Visualizza la versione completa : [C] BubbleSort per Matrici


SergiusXP
23-10-2008, 16:34
Salve a tutti!!
Avendo una matrice come questa:

3 5 1
7 3 0
9 5 1

vorrei ordinarla per colonne, per ottenere questa:

3 3 0
7 5 1
9 5 1


Potete aiutarmi? Non so da dove cominciareee!! Grazie a tutti^^

oregon
23-10-2008, 18:32
Comincia con il dimensionare la matrice, riempirla con valori di prova e studiare il metodo che hai citato, per una singola colonna

http://it.wikipedia.org/wiki/Bubble_sort

Forza ... un po' di impegno ...

SergiusXP
23-10-2008, 19:13
odio quando la gente mi dice di mettermi di impegno.

Se chiedo aiuto Ŕ perchŔ, evidentemente, non ci arrivo e ci ho giÓ provato 100 volte!!

oregon
23-10-2008, 19:20
Originariamente inviato da SergiusXP
odio quando la gente mi dice di mettermi di impegno.

Beh ... potrei dirti che odio chi chiede aiuto senza mostrare una linea di codice che "dimostri" quell'impegno ...



Se chiedo aiuto Ŕ perchŔ, evidentemente, non ci arrivo e ci ho giÓ provato 100 volte!!

E facci vedere 1 di quelle 100 ...

17RoiDavid
24-10-2008, 01:22
prova questo...



#include<stdio.h>
#include<stdlib.h>
#define DIM_R 3 //numero righe
#define DIM_C 3 //numero colonne

int * bubble(int a[], int n); //bubble_sort generico
void copy_new(int a[][DIM_C], int app[], int column); //copia un vettore nel colonna column della matrice a

int main(void){
srand(time(NULL));
int matrix[DIM_R][DIM_C];
int i, j, z;
int *app;

app=calloc(DIM_R, sizeof(int));

/*INIZIALIZZO LA MATRICE CON NUMERI A CASO E LA STAMPO*/
for(i=0;i<DIM_R;i++)
for(j=0;j<DIM_C;j++)
matrix[i][j]=rand()%DIM_R+1;

for(i=0;i<DIM_R;i++){
printf("\n");
for(j=0;j<DIM_C;j++)printf("%d ", matrix[i][j]);
}printf("\n\n");
/*------------------------------------------*/

for(j=0;j<DIM_C;j++){
for(i=0;i<DIM_R;i++){app[i]=matrix[i][j];} //carico in un vettore temporaneo una colonna
app=bubble(app, DIM_R); //ordino il vettore appena ottenuto
copy_new(matrix, app, j); //e lo copio nella colonna j della matrice
}

/*STAMPO LA MATRICE ORDINATA*/
for(z=0;z<DIM_R;z++){
printf("\n");
for(j=0;j<DIM_C;j++)printf("%d ", matrix[z][j]);
}printf("\n\n");
/*--------------------------------*/

free(app);
printf("\n");
system("pause");
return 0;
}

void copy_new(int a[][DIM_C], int app[], int column){
int i;
for(i=0;i<DIM_R;i++){
a[i][column]=app[i];
}
}

int * bubble(int a[], int n){
int i, j, tmp;

for(i=1;i<n;i++){
for(j=1;j<n-i+1;j++){
if(a[j-1]>a[j]){
tmp=a[j-1];
a[j-1]=a[j];
a[j]=tmp;
}
}
}
return a;
}


cambia le 2 define se vuoi matrici piu grandi ;)

Loading