• Sortiranje niza- postupak kojim se elementi niza
slažu po veličini. • Problem koji se često javlja u programiranju • Postoji više algoritama za njegovo rješavanje. • Za nizove s manjim brojem elemenata (najviše nekoliko stotina) mogu se uspješno koristiti jednostavniji algoritmi. • Za velike nizove koriste se nešto složeniji algoritmi poput merge sort, quick sort • Jedan od najjednostavnijih algoritama. • Efikasan za nizove s manjim brojem elemenata(do 500) • U prvom koraku dovodi se na prvo mjesto najmanji broj od preostalih I tako dalje, a postupak se nastavlja sve dok se ne dođe do potpunog rješenja. • Na koji način?
• Vrijednost svakog elementa niza (počevši od
prvog) upoređuje s vrijednostima elemenata koji dolaze poslije njega. • Ako je redosljed dvaju elemenata koji se upoređuju obratan od redosljeda sortiranja, elementima se zamjene vrijednosti • Upotrebom pomoćne promjenljive • Početne vrijednosti x=6 i y=4 niz naredbi: • t=x vrijednost promjenljive x smještamo u pomoćnu promjenljivu t, t=6; • x=y u promjenljivu x smještamo vrijednost promjenljive y, x=4 • y=t u promjenljivu z smještamo vrijednost promjenljive t, y=6 • nakon čega dobijamo nove vrijednosti za x=4 i y=6 • primjer: • u niz A upisane su vrijednosti:
1 2 5 4 3 1 2 4 5 3 1 2 3 5 4 rezultat 3. prolaska Četvrti prolazak
A[0] A[1] A[2] A[3] A[4]
1 2 3 5 4 1 2 3 4 5 rezultat 4. prolaska Funkcija za sortiranje elemenata niza u rastućem poretku:
void sortiraj (int x[10])
{ int pom,i,j; for (i=0;i<n-1;i++) for (j=i+1;j<n;j++) if (x[j]<x[i]) { /*zamjena vrijednosti*/ pom=x[i]; x[i]=x[j]; x[j]=pom; } } • Zadatak: Napišite program koji omogućuje unošenje niza od najviše 10 elemenata, sortira ih i ispisuje u rastućem redoslijedu. #include<stdio.h> int main() { int a[10],i,j,n,pom; printf("\n upisite broj elemenata niza: "); scanf("%d",&n); if (n<=10) { for(i=0;i<n;i++) { printf("%d: ",i+1); scanf("%d",&a[i]); } for (i=0;i<n-1;i++) for (j=i+1;j<n;j++) if (a[j]<a[i]) { /*zamjena vrijednosti*/ pom=a[i]; a[i]=a[j]; a[j]=pom; } printf("sortirani niz je:\n"); for (i=0;i<n;i++) printf("%d ",a[i]); } else printf("upisali ste previse elemenata"); }