Dans les 3 heures de voyage en train entre Munich et Francfort (que j'ai eu de la difficulté à atteindre à cause de l'Oktoberfest commence demain), je pensais à mon premier post. Employant un tableau global est une bien meilleure idée pour une fonction de tri. La fonction suivante poignées arbitraire des chaînes de caractères (les retours à la ligne, flans...):
declare BSORT=()
function bubble_sort()
{ #
# @param [ARGUMENTS]...
#
# Sort all positional arguments and store them in global array BSORT.
# Without arguments sort this array. Return the number of iterations made.
#
# Bubble sorting lets the heaviest element sink to the bottom.
#
(($# > 0)) && BSORT=("$@")
local j=0 ubound=$((${#BSORT[*]} - 1))
while ((ubound > 0))
do
local i=0
while ((i < ubound))
do
if [ "${BSORT[$i]}" \> "${BSORT[$((i + 1))]}" ]
then
local t="${BSORT[$i]}"
BSORT[$i]="${BSORT[$((i + 1))]}"
BSORT[$((i + 1))]="$t"
fi
((++i))
done
((++j))
((--ubound))
done
echo $j
}
bubble_sort a c b 'z y' 3 5
echo ${BSORT[@]}
Cette affiche:
3 5 a b c z y
Le même résultat est créé à partir de
BSORT=(a c b 'z y' 3 5)
bubble_sort
echo ${BSORT[@]}
Notez que, probablement, Bash utilise en interne smart-pointeurs, le swap de l'opération pourrait être bon marché (bien que j'en doute). Toutefois, bubble_sort
démontre que des fonctionnalités plus avancées comme merge_sort
sont également dans la portée de la coquille de la langue.