E ovako : imam zadatak koji glasi "Inicijalizirajte tablicu dimenzija 4x4 i ispišite novu tablicu sa poredanim elementima po velicini." Znam ga uraditi koristeci obicni niz (niz[16], ali 99% sam siguran da bi trebalo koristeci 2dimenzionalni niz (niz[4][4]). Ali nikako ne vidim kako bi to uradio, pa molim vas bi li mi netko mogao pokazati. Sutra mi je ispit, pa velika hvala tko pokaze !
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Da ne ispadnem lijencina koja ceka da netko drugi uradi za njega, evo sta sam uradio dosad :
#include <stdio.h>
void main()
{
int i,j,t;
int x[16] = {7,9,3,4,5,8,7,-8,3,-1,1,2,3,-4,5,-6};
for (i=0;i<4;i++){
for (j=0;j<4;j++){
printf("%d \t",x[(4*i)+j]);
}
printf("\n");
}
for (i=0;i<15;i++){
for (j=i+1;j<16;j++){
if (x[i]>x[j]){
t=x[i];
x[i]=x[j];
x[j]=t;
}
}
}
printf ("\n");
for (i=0;i<4;i++){
for (j=0;j<4;j++){
printf("%d \t",x[(4*i)+j]);
}
printf("\n");
}
}
Tek počinješ s C-om kao i ja,pa evo moj savjet.
Probaj staviti u N[16],pa ga sortiraj preko BubbleSorta,
te napravi tablicu pomoću njega,ako se to uoće može napraviti.
Ili modificiraj BubbleSort,da može prelaziti preko matrice?
Ajde taman vježbam za kolokvij,probat ću tako riješit.
prvi put cujem za bubblesort..
edit: ovo gore sto sam uradio radi, nema potrebe ni za kakvim modifikacijama.
mene samo zanima moze li se uraditi koristeci 2d niz
IMaš napisan bubble sort algo u svom kodu već.
Evo pokušavam,ne uspijeva mi baš
prvi put cujem za bubblesort..
edit: ovo gore sto sam uradio radi, nema potrebe ni za kakvim modifikacijama.
mene samo zanima moze li se uraditi koristeci 2d niz
Naravno da se može. Napravi se pokazivač na početak 2D niza i onda se sortira kao 1D polje:
int matrica[3][3] = ....
int *p = &matrica[0][0];
sortiraj p veličine 3*3
@pandza
hehe...naucili su nas to, ali nisu imenovali taj algoritam...
@tracer
mi to jos nismo ucili, pa pretpostavljam da profesorica nije mislila na pointere ( znam sta su, naucio sam iz tutoriala s neta :P)
hvala uglavnom
U biti treba samo osigurati da algoritam prođe kroz sve elemente matrice na način kao da je niz jednodimenzionalni.
To se vrlo lako postigne operatorima cjelobrojnog dijeljenja i modulo.
Dakle, vanjska petlja ima prolaz kroz sve elemnte do posljednjeg na ovaj način:
for(int i=0; i<8; i++) - za iteraciju i=7 je indeks reda 7/3 = 2, a indeks stupca 7%3 = 1, odnosno to je elerment dvodimenzionalnog niza niz[2][1].
Postupak je isti i za unutarnju petlju.
#include <iostream>
using namespace std;
int main()
{
int temp;
int niz[3][3] = {{8,5,1} ,{7,15,28} ,{19,4,3}};
for (int i = 0; i < 8; i++)
{
for (int j = i+1; j < 9; j++)
{
if(niz[i/3][i%3] > niz[j/3][j%3])
{
temp = niz[i/3][i%3];
niz[i/3][i%3] = niz[j/3][j%3];
niz[j/3][j%3] = temp;
}
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
cout<< niz[i][j] << " ";
}
cout<< endl;
}
return 0;
}
p.s. žao mi je, vidim da je prekasno, ali neka stoji, valjat će ubuduće
Na istu foru možemo izvršiti ispis 2D niza sa jednom petljom, međutim složenost je ista O(n*m), a aritmetičkih operacija više, pa to nema smisla raditi, osim ako profesorici i to ne padne na pamet staviti kao zadatak kao i 2D niz u algoritam za sortiranje. Zato je onaj način sa aritmetikom pokazivača koji je @Tracer naveo bolji, uz istu složenost algoritma manje aritmetičkih operacija.
U ovom slučaju:
for (int i = 0; i < 9; i++)
{
cout<< niz[i/3][i%3] << " ";
if(i%3==2) cout<< endl;
}