Prevedimo sada program iz paskalolikog jezika (za koji smo dokazali totalnu korektnost), u C program vodeći računa da pri tome ne narušimo invarijante petlji i korektnost programa.
Primetimo da u dosadašnjem opisu algoritma i dokazu njegove korektnosti nije bilo reči o tipu elemenata niza već je samo pretpostavljano da se oni mogu porediti. U nastavku navedimo implementaciju algoritma prilagođenu nizovima celih brojeva:
main() { int X[]={2, 5, 1, 6}; unsigned int n = sizeof(X)/sizeof(int); unsigned int i, j; int pom; for(i=0; i <= n-2; i++) for(j=i+1; j<= n-1; j++) if(X[i] > X[j]) { pom = X[i]; X[i] = X[j]; X[j] = pom; } }
Obezbedimo unos niza sa ulaza i ispis rezultata na izlaz:
#include<stdio.h> #define MAX_DIM 100 main() { unsigned int n; unsigned int i, j; int pom; int X[MAX_DIM]; printf("Unesite dimenziju niza koji zelite da sortirate:\n"); scanf("%d", &n); while(n>MAX_DIM) { printf("Uneli ste preveliku dimenziju. Pokusajte ponovo:\n"); scanf("%d", &n); } for(i=0; i<n; i++) { printf("Unesite %d-ti element niza:\n", i); scanf("%d", &X[i]); } for(i=0; i <= n-2; i++) for(j=i+1; j <= n-1; j++) if(X[i] > X[j]) { pom = X[i]; X[i] = X[j]; X[j] = pom; } printf("Niz sortiran u rastucem redosledu je:\n"); for(i=0; i<n; i++) { printf("%d ", X[i]); } }
Na ovaj način smo došli do programa koji sortira niz celih brojeva. Pri tome, znamo da se on uvek zaustavlja i da je korektan za sve moguće ulaze.
Navedeni algoritam i odgovarajuća implementacija može se jednostavno unaprediti. Umesto da se zamena elemenata vrši kao što je opisano, dovoljno je odrediti indeks najmanjeg elementa u tekućem podnizu i zatim izvršiti zamenu sa prvim elementom tog podniza. Time će biti smanjen broj izvršenih zamena u odnosu na osnovni algoritam.
Naredna: Korisni linkovi i materijali Gore: Selection sort Prethodna: Dokaz zaustavljanja programa Sadržaj