Nasleduje funkcia v jazyku C, ktorá implementuje algoritmus Insert sort. Uvedená funkcia vstupné pole celých čísel usporiada vzostupne.
//******INSERT SORT*******
//vstup: pole celych cisel urcene na usporiadanie, dlzka zadaneho pola
//ucel: vzostupne usporiadanie zadaneho pola
//algoritmus: Insert sort
//vystup: (void)
|
void int_insert_vzostup(int *pole_int, int dlzka)
{
int presuny = 0;
int porovnania = 0;
int ptr = 1; //ptr = aktualna pozicia
//druhy prvok postupnosti
int vkladany; //vkladany prvok
int pom_ptr; //pomocny index
int i; //i = prehladavana pozicia
//pokial je aktualna pozicia(=ptr) mensia ako zadana dlzka pola
while(ptr < dlzka){
//vyber vkladaneho prvku (z aktualnej pozicie=ptr)
presuny++;
vkladany = pole_int[ptr];
//hladanie pozicie vkladaneho prvku v dosial usporiadanej casti pola,
//tj. od zaciatku pola po aktualnu poziciu(=ptr)
for(i = 0; i < ptr; i++){
porovnania++;
//pre zostupne usporiadanie bude podmienka:
//if( vkladany > pole_int[i] )
if( vkladany < pole_int[i] ){
//vloz ho tam
//presun prvkov, ktore budu v usporiadanom poli za vkladanym
pom_ptr = ptr;
while(pom_ptr > i){
presuny++;
pole_int[pom_ptr] = pole_int[pom_ptr-1];
pom_ptr--;
}
//vlozenie vkladaneho prvku na jeho miesto
//i == ptr
pole_int[i] = vkladany;
presuny++;
break;
}
}
//if(i == ptr) netreba vkladany prvok vkladat,
//pretoze je vacsi nez vsetky prvky v usporiadanej casti pola
//aktualna pozicia(=ptr) = dalsi prvok pola
ptr++;
}
//vypis konecnych hodnot porovnani a presunov
printf("Pocet porovnani: %d\n", porovnania);
printf("Pocet presunov: %d\n", presuny);
return;
}
|