Initial commit
This commit is contained in:
31
snippets/qsort.sh
Executable file
31
snippets/qsort.sh
Executable file
@@ -0,0 +1,31 @@
|
||||
#!/bin/bash
|
||||
|
||||
# quicksorts positional arguments
|
||||
# return is in array qsort_ret
|
||||
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[@]}" )
|
||||
}
|
||||
|
||||
array=(a c b "f f" 3 5)
|
||||
|
||||
qsort "${array[@]}"
|
||||
|
||||
declare -p qsort_ret
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user