2020-09-14 10:43:44 +02:00
[ 38 ; 2 ; 117 ; 113 ; 94 m # [0m [38;2;117;113;94m quicksort.awk --- Quicksort algorithm, with user-supplied [0m
[ 38 ; 2 ; 117 ; 113 ; 94 m # [0m [38;2;117;113;94m comparison function [0m
[ 38 ; 2 ; 117 ; 113 ; 94 m # [0m
[ 38 ; 2 ; 117 ; 113 ; 94 m # [0m [38;2;117;113;94m Arnold Robbins, arnold@skeeve.com, Public Domain [0m
[ 38 ; 2 ; 117 ; 113 ; 94 m # [0m [38;2;117;113;94m January 2009 [0m
[ 38 ; 2 ; 117 ; 113 ; 94 m # [0m [38;2;117;113;94m quicksort --- C.A.R. Hoare's quicksort algorithm. See Wikipedia [0m
[ 38 ; 2 ; 117 ; 113 ; 94 m # [0m [38;2;117;113;94m or almost any algorithms or computer science text. [0m
[ 38 ; 2 ; 117 ; 113 ; 94 m # [0m
[ 38 ; 2 ; 117 ; 113 ; 94 m # [0m [38;2;117;113;94m Adapted from K&R-II, page 110 [0m
[ 3 ; 38 ; 2 ; 102 ; 217 ; 239 mfunction [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 166 ; 226 ; 46 mquicksort [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m ( [ 0 m [ 3 ; 38 ; 2 ; 253 ; 151 ; 31 mdata [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 3 ; 38 ; 2 ; 253 ; 151 ; 31 mleft [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 3 ; 38 ; 2 ; 253 ; 151 ; 31 mright [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 3 ; 38 ; 2 ; 253 ; 151 ; 31 mless_than [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 3 ; 38 ; 2 ; 253 ; 151 ; 31 mi [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 3 ; 38 ; 2 ; 253 ; 151 ; 31 mlast [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m ) [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m { [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 mif [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ( [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mleft [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m >= [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mright [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ) [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 117 ; 113 ; 94 m # [0m [38;2;117;113;94m do nothing if array contains fewer [0m
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mreturn [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 117 ; 113 ; 94 m # [0m [38;2;117;113;94m than two elements [0m
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 166 ; 226 ; 46 mquicksort_swap [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ( [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mdata [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mleft [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 102 ; 217 ; 239 mint [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ( [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ( [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mleft [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m + [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mright [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ) [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m / [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 190 ; 132 ; 255 m2 [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ) [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ) [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mlast [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m = [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mleft [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 166 ; 226 ; 46 mfor [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ( [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mi [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m = [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mleft [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m + [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 190 ; 132 ; 255 m1 [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m ; [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mi [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m <= [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mright [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m ; [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mi [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m ++ [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ) [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 166 ; 226 ; 46 mif [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ( [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m @ [ 0 m [ 38 ; 2 ; 166 ; 226 ; 46 mless_than [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ( [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mdata [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m [ [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mi [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m ] [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mdata [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m [ [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mleft [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m ] [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ) [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ) [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 166 ; 226 ; 46 mquicksort_swap [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ( [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mdata [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m + [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m + [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mlast [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mi [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ) [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 166 ; 226 ; 46 mquicksort_swap [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ( [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mdata [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mleft [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mlast [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ) [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 166 ; 226 ; 46 mquicksort [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ( [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mdata [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mleft [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mlast [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m - [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 190 ; 132 ; 255 m1 [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mless_than [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ) [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 166 ; 226 ; 46 mquicksort [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ( [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mdata [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mlast [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m + [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 190 ; 132 ; 255 m1 [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mright [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mless_than [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 m ) [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m } [ 0 m
[ 38 ; 2 ; 117 ; 113 ; 94 m # [0m [38;2;117;113;94m quicksort_swap --- helper function for quicksort, should really be inline [0m
[ 3 ; 38 ; 2 ; 102 ; 217 ; 239 mfunction [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 166 ; 226 ; 46 mquicksort_swap [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m ( [ 0 m [ 3 ; 38 ; 2 ; 253 ; 151 ; 31 mdata [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 3 ; 38 ; 2 ; 253 ; 151 ; 31 mi [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 3 ; 38 ; 2 ; 253 ; 151 ; 31 mj [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m , [ 0 m [ 3 ; 38 ; 2 ; 253 ; 151 ; 31 mtemp [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m ) [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m { [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mtemp [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m = [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mdata [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m [ [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mi [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m ] [ 0 m
2020-09-14 11:16:19 +02:00
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mdata [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m [ [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mi [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m ] [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m = [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mdata [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m [ [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mj [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m ] [ 0 m
[ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mdata [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m [ [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mj [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m ] [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 249 ; 38 ; 114 m = [ 0 m [ 38 ; 2 ; 248 ; 248 ; 242 m [ 0 m [ 38 ; 2 ; 255 ; 255 ; 255 mtemp [ 0 m
2020-09-14 10:43:44 +02:00
[ 38 ; 2 ; 248 ; 248 ; 242 m } [ 0 m