Napište funkci, která zadané pole řetězců znaků utřídí přihrádkovým tříděním podle jejich prvního znaku. Řetězce obsahují jen malá písmena anglické abecedy.
def bucketsort(seznam)
prihradky = Array.new
26.times do
prihradky << Array.new
end
seznam.each do |retezec|
ascii = retezec[0]
prihradky[ascii - ?a] << retezec
end
return prihradky.flatten
end
bucketsort(["azalka", "brambora", "banan", "ananas", "citron"])
Napište funkci, která dostane dvě utříděná pole čísel (od nejmenšího) a sléváním z nich vyrobí jedno velké utříděné pole.
Jestli to píšete v C nebo C++, můžete předpokládat, že obě vstupní pole mají 10 prvků.
#include <iostream>
using namespace std;
// funkce typu pole intů (přesněji: ukazatel na int)
int *merge(int levy[10], int pravy[10]){
// vytvoříme si pole na výsledky
int *vysledky = new int[20];
int l = 0, r = 0, v = 0;
// slučujeme pole, dokud jsou prvky v obou
while (l < 10 && r < 10){
if (levy[l] < pravy[r])
vysledky[v++] = levy[l++];
else
vysledky[v++] = pravy[r++];
}
// na konec přidáme zbývající prvky v jednom z polí
while (l < 10)
vysledky[v++] = levy[l++];
while (r < 10)
vysledky[v++] = pravy[r++];
return vysledky;
}
// ukázkové použití (do písemky není třeba psát)
int main(){
int a[]={2, 3, 6, 7, 13, 14, 19, 22, 23, 27},
b[]={2, 2, 9, 9, 11, 12, 16, 17, 19, 22};
// necháme si obě pole spojit
int *pole = merge(a,b);
for (int i = 0; i < 19; i++)
cout << pole[i] << ", ";
cout << pole[19] << endl;
// co jsme vytvořili pomocí new, bychom měli smazat pomocí delete
delete pole;
}