1 | #!/usr/bin/env bash
|
2 | #
|
3 | # Usage:
|
4 | # ./bubble_sort.sh <function name>
|
5 |
|
6 | set -o nounset
|
7 | set -o pipefail
|
8 | set -o errexit
|
9 |
|
10 | # Fix the lexicographical comparisons!!!
|
11 | LANG=C
|
12 |
|
13 | main() {
|
14 | mapfile seq
|
15 |
|
16 | #echo ${#seq[@]}
|
17 |
|
18 | if test "$1" = 'int'; then
|
19 | # Sort by integer value
|
20 | local changed=T
|
21 | while test -n "$changed"; do
|
22 | changed=''
|
23 | for (( i = 0; i < ${#seq[@]} - 1; ++i )); do
|
24 | if (( seq[i] > seq[i+1] )); then
|
25 | tmp=${seq[i+1]}
|
26 | seq[i+1]=${seq[i]}
|
27 | seq[i]=$tmp
|
28 | changed=T
|
29 | fi
|
30 | done
|
31 | done
|
32 |
|
33 | else
|
34 | # Sort by bytes
|
35 | local changed=T
|
36 | while test -n "$changed"; do
|
37 | changed=''
|
38 | for (( i = 0; i < ${#seq[@]} - 1; ++i )); do
|
39 | # LANG=C required here
|
40 | if [[ ${seq[i]} > ${seq[i+1]} ]]; then
|
41 | tmp=${seq[i+1]}
|
42 | seq[i+1]=${seq[i]}
|
43 | seq[i]=$tmp
|
44 | changed=T
|
45 | fi
|
46 | done
|
47 | done
|
48 | fi
|
49 |
|
50 | for line in "${seq[@]}"; do
|
51 | echo -n "$line"
|
52 | done
|
53 | }
|
54 |
|
55 | main "$@"
|