10.17. Učitati članove i sortirati ih po rastućem redoslijedu.
(5 članova niza)
j - indeks člana niza koji se poredi sa svim članovima do kraja
i - indeks člana niza koji se poredi
Tabela 10.13. Sort niza
** |
Prolaz |
Članovi niza |
Indeks |
Opis |
1 |
Ne sortiran niz |
3 9 8 2 5 |
j i |
Zamjena |
2 |
1. prolaz |
3 9 8 2 5 |
1 2 |
|
3 |
|
3 9 8 2 5 |
3 |
|
4 |
|
3 9 8 2 5 |
4 |
Da |
5 |
|
2 9 8 3 5 |
5 |
|
6 |
|
2 |
5 |
1. cifra poslije prvog prolaza |
7 |
2. prolaz |
9 8 3 5 |
2 3 |
Da |
8 |
|
3 8 9 5 |
4 |
|
9 |
|
3 8 9 5 |
5 |
|
10 |
|
3 |
5 |
2. cifra poslije drugog prolaza |
11 |
3. prolaz |
8 9 5 |
3 4 |
|
12 |
|
8 9 5 |
5 |
Da |
13 |
|
5 9 8 |
|
|
14 |
|
5 |
|
3. cifra poslije trećeg prolaza |
15 |
4. prolaz |
9 8 |
|
Da |
16 |
|
8 9 |
|
Izmjena |
17 |
|
8 9 |
|
4. i 5. cifra poslije četvrtog prolaza |
18 |
Sortiran niz |
2 3 5 8 9 |
|
|
Tabela 10.14. Sort niza
** |
Listing programa |
Opis |
1 |
PROGRAM NIZ_SORT; |
Zaglavlje |
2 |
CONST |
|
3 |
n = 5; |
Broj članova niza |
4 |
VAR |
|
5 |
i, j, pom : INTEGER; |
Promjenljive |
6 |
X : ARRAY [1..n] OF INTEGER; |
Niz |
7 |
BEGIN |
|
8 |
WRITELN Sort niza'); |
Naslov |
9 |
FOR i := 1 TO n DO {ulaz} |
Upis članova niza |
10 |
BEGIN |
|
11 |
WRITE(i,' --> '); |
|
12 |
READLN(X[i]); |
|
13 |
END; |
|
14 |
FOR j := 1 TO n - 1 DO |
Prvi iz skupine |
15 |
FOR i := j+1 TO n DO |
|
16 |
IF X[j] > X[i] THEN |
? dobar redoslijed |
17 |
BEGIN |
Nije |
18 |
pom := X[j]; |
Zamjena |
19 |
X[j] := X[i]; |
|
20 |
X[i] := pom; |
|
21 |
END; |
|
22 |
FOR i := 1 TO n DO {izlaz} |
Ispis sortiranih članova |
23 |
WRITELN('X[',i,'] = ', X[i]); |
|
24 |
END. |
Kraj programa |
j - indeks opsega članova niza koji se porede
i - indeks člana niza koji se poredi sa susjednim članom
Tabela 10.15. Sort niza
** |
Prolaz |
Članovi niza |
Indeks |
Opis |
1 |
Ne sortiran niz |
3 9 8 2 5 |
j i |
Zamjena |
2 |
1. prolaz |
3 9 8 2 5 |
5 4 |
|
3 |
|
3 9 8 2 5 |
3 |
Da |
4 |
|
3 9 2 8 5 |
2 |
Da |
5 |
|
3 2 9 8 5 |
1 |
Da |
6 |
|
2 3 9 8 5 |
|
|
7 |
|
2 |
|
1. cifra |
8 |
2. prolaz |
3 9 8 5 |
4 3 |
Da |
9 |
|
3 9 5 8 |
2 |
Da |
10 |
|
3 5 9 8 |
1 |
|
11 |
|
3 |
|
2. cifra |
12 |
3. prolaz |
5 9 8 |
3 2 |
Da |
13 |
|
5 8 9 |
1 |
|
14 |
|
5 9 8 |
|
|
15 |
|
5 |
|
3. cifra |
16 |
4. prolaz |
9 8 |
2 1 |
Da |
17 |
|
8 9 |
|
4. i 5. cifra |
18 |
Sortiran niz |
2 3 5 8 9 |
|
|
Tabela 10.16. Sort niza
** |
Listing programa |
Opis |
1 |
PROGRAM NIZ_SORT; |
Zaglavlje |
2 |
CONST |
|
3 |
n = 5; |
Broj članova niza |
4 |
VAR |
|
5 |
i, j, pom : INTEGER; |
Promjenljive |
6 |
X : ARRAY [1..n] OF INTEGER; |
Niz |
7 |
BEGIN |
|
8 |
WRITELN ('Sort niza'); |
Naslov |
9 |
FOR i := 1 TO n DO {ulaz} |
Upis članova niza |
10 |
BEGIN |
|
11 |
WRITE(i,' --> '); |
|
12 |
READLN(X[i]); |
|
13 |
END; |
|
14 |
FOR j := n - 1 DOWNTO 1 DO |
Susjedni član |
15 |
FOR i := j DOWNTO 1 DO |
Poredi sa ostalim |
16 |
IF X[i] < X[i + 1] THEN |
? dobar redoslije, susjedni |
17 |
BEGIN |
Nije |
18 |
pom := X[i]; |
Zamjena |
19 |
X[i] := X[i + 1]; |
|
20 |
X[i + 1] := pom; |
|
21 |
END; |
|
22 |
FOR i := 1 TO n DO {izlaz} |
Ispis sortiranih članova |
23 |
WRITELN('X[',i,'] = ', X[i]); |
|
24 |
END. |
Kraj programa |
Poboljšanje algoritma: u dio promjene dodati indikator SEM i provjeru (linije 15 do 21). Proces sortiranja izvoditi samo ako je bila zamjena u prethodnom prolazu.
Listing programa:
PROGRAM P10711001;
USES
WinCrt;
CONST
n = 5;
VAR
i, j, pom : INTEGER;
X : ARRAY [1..n] OF INTEGER;
BEGIN
WRITELN ('Sort niza');
FOR i := 1 TO n DO {ulaz}
BEGIN
WRITE(i,' --> ');
READLN(X[i]);
END;
FOR j := n - 1 DOWNTO 1 DO
FOR i := j DOWNTO 1 DO
IF X[i] < X[i + 1] THEN
BEGIN
pom := X[i];
X[i] := X[i + 1];
X[i + 1] := pom;
END;
FOR i := 1 TO n DO {izlaz}
WRITELN('X[',i,'] = ', X[i]);
END.
Izvođenje programa:
Index
|
|