Bubblesort
bubblesort.sh
This is simply a demostration of how bubble sort works
#!/bin/bash inputresults() { markFile="marks.txt" read -p "Input first student name: " name while [ "$name" != "xxx" ] ; do read -p "Input student mark: " mark echo "$name,$mark" >> $markFile read -p "Input next student name, (xxx to end) :" name done } readresults() { read line < mark.txt } clear studentNames=(" " " " " " " " " " " " " " " " " ") studentMarks=(0 0 0 0 0 0 0 0 0) set | grep student markFile=marks.txt echo "names and marks will be stored in two arrays" for n in 9 8 7 6 5 4 3 2 1; do name=$(tail -$n $markFile | head -1| cut -d, -f1) mark=$(tail -$n $markFile | head -1| cut -d, -f2) (( pointer = n -1 )) studentNames[$pointer]=$name studentMarks[$pointer]=$mark # next n done echo "Arrays are now" DEBUG=1 set | grep student for i in 0 1 2 3 4 5 6 7 8 ; do (( x = 8 - i )) j=0 while (( j < x )) ; do (( j1 = j + 1 )) clear (( DEBUG == 1 )) && set | grep studentNames | grep ${studentNames[$j]} echo "if position $j ${studentNames[$j]} > position $j1 ${studentNames[${j1}]} then swap" if [[ "${studentNames[$j]}" > "${studentNames[${j1}]}" ]] ; then (( DEBUG == 1 )) && read && echo " Swapping ${studentNames[$j]} and ${studentNames[${j1}]}" temp=${studentNames[${j1}]} studentNames[${j1}]=${studentNames[$j]} studentNames[${j}]=$temp (( DEBUG == 1 )) && set | grep studentNames | grep ${studentNames[$j1]} else (( DEBUG == 1 )) && read && echo "Dont need to swap" (( DEBUG == 1 )) && set | grep studentNames | grep ${studentNames[$j]} fi (( DEBUG == 1 )) && read #echo "$i, $j" (( j ++ )) done done
With marks.txt
Jo,65 Yan,88 Paul,76 Daisy,88 Mabel,80 Mavis,79 Anna,58 Billy,88 Keith,56