remove faulty use of sort command (implement qsort in pure bash)
This commit is contained in:
@@ -1,18 +1,16 @@
|
|||||||
cc -w ex1-c.c -o ex1-c
|
|
||||||
ex1.bash : diff1=71 diff2=27 res=1917
|
ex1.bash : diff1=71 diff2=27 res=1917
|
||||||
time: 0:00.01 real, 0.00 user, 0.00 sys
|
time: 0:00.01 real, 0.01 user, 0.00 sys
|
||||||
context-switch: 1+4, page-faults: 0+331
|
context-switch: 7+1, page-faults: 0+234
|
||||||
|
|
||||||
ex1-c : diff1=71 diff2=27 res=1917
|
ex1-c : diff1=71 diff2=27 res=1917
|
||||||
time: 0:00.00 real, 0.00 user, 0.00 sys
|
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+73
|
||||||
|
|
||||||
cc -w ex2-c.c -o ex2-c
|
|
||||||
ex2.bash : size=99 res=113387824750592
|
ex2.bash : size=99 res=113387824750592
|
||||||
time: 0:00.01 real, 0.01 user, 0.00 sys
|
time: 0:00.02 real, 0.02 user, 0.00 sys
|
||||||
context-switch: 2+4, page-faults: 0+329
|
context-switch: 10+1, page-faults: 0+236
|
||||||
|
|
||||||
ex2-c : size=99 res=113387824750592
|
ex2-c : size=99 res=113387824750592
|
||||||
time: 0:00.00 real, 0.00 user, 0.00 sys
|
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
|
||||||
|
|
||||||
|
@@ -5,9 +5,31 @@
|
|||||||
CMD=${0##*/}
|
CMD=${0##*/}
|
||||||
shopt -s extglob
|
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
|
declare -a numbers
|
||||||
readarray -t numbers <<< "$(sort -n)"
|
readarray -t numbers
|
||||||
numbers=(0 "${numbers[@]}")
|
qsort "${numbers[@]}"
|
||||||
|
numbers=(0 ${qsort_ret[@]})
|
||||||
size=${#numbers[@]}
|
size=${#numbers[@]}
|
||||||
((last=${numbers[size-1]}+3))
|
((last=${numbers[size-1]}+3))
|
||||||
numbers+=("$last")
|
numbers+=("$last")
|
||||||
|
@@ -5,9 +5,31 @@
|
|||||||
CMD=${0##*/}
|
CMD=${0##*/}
|
||||||
shopt -s extglob
|
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
|
declare -a numbers
|
||||||
readarray -t numbers <<< "$(sort -nr)"
|
readarray -t numbers
|
||||||
numbers+=(0)
|
qsort "${numbers[@]}"
|
||||||
|
numbers=(${qsort_ret[@]} 0)
|
||||||
((last=numbers[0]+3))
|
((last=numbers[0]+3))
|
||||||
numbers=("$last" "${numbers[@]}")
|
numbers=("$last" "${numbers[@]}")
|
||||||
size=${#numbers[@]}
|
size=${#numbers[@]}
|
||||||
|
Reference in New Issue
Block a user