#include #include /* Ukolem bylo napsat program, ktery algoritmem insert sort * seradi cisla zadana od uzivatele tak, ze radit bude dle * nejvyznamnejsi (nejlevejsi) cislice danych cisel. Radit * bude sestupne (nejvetsi napred). U zapornych cisel ignorujeme * jejich zapornost, tedy -5 > 44 apod. */ // funkce pro vypocet nejvyznamnejsi cislice int dc(int c) { c = abs(c); // u zapornych cisel uvazujeme stejne jen tu cislici int vysl = 0; while (c > 0) { // dokud je cislo > 0, zkousime delit 10 vysl = c; // nakonec bude c == 0 a ve vysl nejvyznamnejsi cislice, napr. 345 => 3, 25 => 2 c /= 10; } return vysl; // nejvyznamnejsi cislici vratime } int main(void) { int pocet = 0; // pocet cisel, ktera hodla uzivatel zadat scanf("%d", &pocet); // zjisteni poctu cisel int p[pocet]; // delkarace dostatecne velkeho pole for (int i = 0; i < pocet; ++i) scanf("%d", &p[i]); // nacteni prvku do pole // seradime pole inssortem (dle nejvyznamnejsi cislice) for (int i = 0; i < pocet; ++i) { // pres vsechny validni pozice voli int h = p[i]; // vezmeme hodnotu na i-te pozici int cil_index = i-1; // pro zacatek nastavime cilovy index o 1 doleva while(cil_index >= 0 && dc(p[cil_index]) < dc(h)) { // dokud lze jit doleva a nachazime "mensi" prvky p[cil_index+1] = p[cil_index]; // posouvame prvky doprava --cil_index; // a posouvame cilovy index doleva } p[cil_index+1] = h; // bud dojdeme "za levy okraj pole" // nebo mame prvek, ktery je >= zarazovaneho, // sem vlozime zarazovany prvek } for (int i = 0; i < pocet; ++i) // vypiseme pole printf("%d ", p[i]); printf("\n"); return 0; }