remove faulty use of sort command (implement qsort in pure bash)

This commit is contained in:
2021-07-30 20:07:45 +02:00
parent 92cc3e90c4
commit 5b0a1d7b53
3 changed files with 53 additions and 11 deletions

View File

@@ -1,18 +1,16 @@
cc -w ex1-c.c -o ex1-c
ex1.bash : diff1=71 diff2=27 res=1917
time: 0:00.01 real, 0.00 user, 0.00 sys
context-switch: 1+4, page-faults: 0+331
time: 0:00.01 real, 0.01 user, 0.00 sys
context-switch: 7+1, page-faults: 0+234
ex1-c : diff1=71 diff2=27 res=1917
time: 0:00.00 real, 0.00 user, 0.00 sys
context-switch: 0+1, page-faults: 0+73
cc -w ex2-c.c -o ex2-c
ex2.bash : size=99 res=113387824750592
time: 0:00.01 real, 0.01 user, 0.00 sys
context-switch: 2+4, page-faults: 0+329
time: 0:00.02 real, 0.02 user, 0.00 sys
context-switch: 10+1, page-faults: 0+236
ex2-c : size=99 res=113387824750592
time: 0:00.00 real, 0.00 user, 0.00 sys
context-switch: 0+1, page-faults: 0+73
context-switch: 0+1, page-faults: 0+74

View File

@@ -5,9 +5,31 @@
CMD=${0##*/}
shopt -s extglob
# quicksort implementation (ascending)
qsort() {
local pivot i smaller=() larger=()
qsort_ret=()
(($#==0)) && return 0
pivot=$1
shift
for i; do
if (( i < pivot )); then
smaller+=( "$i" )
else
larger+=( "$i" )
fi
done
qsort "${smaller[@]}"
smaller=( "${qsort_ret[@]}" )
qsort "${larger[@]}"
larger=( "${qsort_ret[@]}" )
qsort_ret=( "${smaller[@]}" "$pivot" "${larger[@]}" )
}
declare -a numbers
readarray -t numbers <<< "$(sort -n)"
numbers=(0 "${numbers[@]}")
readarray -t numbers
qsort "${numbers[@]}"
numbers=(0 ${qsort_ret[@]})
size=${#numbers[@]}
((last=${numbers[size-1]}+3))
numbers+=("$last")

View File

@@ -5,9 +5,31 @@
CMD=${0##*/}
shopt -s extglob
# quicksort implementation (descending)
qsort() {
local pivot i smaller=() larger=()
qsort_ret=()
(($#==0)) && return 0
pivot=$1
shift
for i; do
if (( i > pivot )); then
smaller+=( "$i" )
else
larger+=( "$i" )
fi
done
qsort "${smaller[@]}"
smaller=( "${qsort_ret[@]}" )
qsort "${larger[@]}"
larger=( "${qsort_ret[@]}" )
qsort_ret=( "${smaller[@]}" "$pivot" "${larger[@]}" )
}
declare -a numbers
readarray -t numbers <<< "$(sort -nr)"
numbers+=(0)
readarray -t numbers
qsort "${numbers[@]}"
numbers=(${qsort_ret[@]} 0)
((last=numbers[0]+3))
numbers=("$last" "${numbers[@]}")
size=${#numbers[@]}