Alphabetical Array Sorting

Hi! I ended up needing a way to sort large, ever-growing arrays alphabetically without compromising the original array’s indexes. Regardless, if anyone ever finds the need to sort their own arrays, here’s my solutions:

Prereqs:
(Return var for mapping)
*temp/*create returnvar Z

(Array to sort)
*temp_array/*create_array  source_array  X  Y
*temp/*create  source_array_max X

(Array to map character values, this is just for the gosub to work)
*temp_array/*create_array  intermediate_array  X  "0."

(Array to contain sorted values)
*temp_array/*create_array  target_array  X  ""

Make sure X is all the same.
To use:
Place wherever and call through:
*gosub(_scene)  (scene)  alphabetize  "name of source array"  "name of intermediate array"  "name of target array"
The Code
*label alphabetize
*params source_array intermediate_array target_array
*set count 0
*label loop1
*set count +1
*if count <= {source_array&"_max"}
	*if ({source_array&"_${count}"} = 0) or ({source_array&"_${count}"} = "")
		*set {intermediate_array&"_${count}"} 1
		*goto loop1
	*temp len length({source_array&"_${count}"})
	*set revar 0
	*label loop2
	*set revar +1
	*if revar <= len
		*temp char ({source_array&"_${count}"}#revar)
		*gosub map_char (char)
		*set {intermediate_array&"_${count}"} &returnvar
		*goto loop2
	*goto loop1

*set count 0
*label loop3
*set count +1
*if count <= {source_array&"_max"}
	*temp current_min {intermediate_array&"_1"}
	*temp current_min_index 1
	*set revar 0
	*label loop4
	*set revar +1
	*if revar <= {source_array&"_max"}
		*if {intermediate_array&"_${revar}"} < current_min
			*set current_min_index revar
			*set current_min {intermediate_array&"_${revar}"}
		*goto loop4
	*if current_min != 1
		*set {target_array&"_${count}"} {source_array&"_${current_min_index}"}
	*set {intermediate_array&"_${current_min_index}"} 1
	*goto loop3
*return

*label map_char
*params char

*if (char = "a") or (char = "A")
	*set returnvar "01"
	*return
*elseif (char = "b") or (char = "B")
	*set returnvar "02"
	*return
*elseif (char = "c") or (char = "C")
	*set returnvar "03"
	*return
*elseif (char = "d") or (char = "D")
	*set returnvar "04"
	*return
*elseif (char = "e") or (char = "E")
	*set returnvar "05"
	*return
*elseif (char = "f") or (char = "F")
	*set returnvar "06"
	*return
*elseif (char = "g") or (char = "G")
	*set returnvar "07"
	*return
*elseif (char = "h") or (char = "H")
	*set returnvar "08"
	*return
*elseif (char = "i") or (char = "I")
	*set returnvar "09"
	*return
*elseif (char = "j") or (char = "J")
	*set returnvar "10"
	*return
*elseif (char = "k") or (char = "K")
	*set returnvar "11"
	*return
*elseif (char = "l") or (char = "L")
	*set returnvar "12"
	*return
*elseif (char = "m") or (char = "M")
	*set returnvar "13"
	*return
*elseif (char = "n") or (char = "N")
	*set returnvar "14"
	*return
*elseif (char = "o") or (char = "O")
	*set returnvar "15"
	*return
*elseif (char = "p") or (char = "P")
	*set returnvar "16"
	*return
*elseif (char = "q") or (char = "Q")
	*set returnvar "17"
	*return
*elseif (char = "r") or (char = "R")
	*set returnvar "18"
	*return
*elseif (char = "s") or (char = "S")
	*set returnvar "19"
	*return
*elseif (char = "t") or (char = "T")
	*set returnvar "20"
	*return
*elseif (char = "u") or (char = "U")
	*set returnvar "21"
	*return
*elseif (char = "v") or (char = "V")
	*set returnvar "22"
	*return
*elseif (char = "w") or (char = "W")
	*set returnvar "23"
	*return
*elseif (char = "x") or (char = "X")
	*set returnvar "24"
	*return
*elseif (char = "y") or (char = "Y")
	*set returnvar "25"
	*return
*elseif (char = "z") or (char = "Z")
	*set returnvar "26"
	*return
*else
	*set returnvar "27"
	*return

Example
The three arrays:
*temp_array test_array 15 ""
*set test_array[1] "chrismas"
*set test_array[2] "zipper"
*set test_array[3] "charisma"
*set test_array[4] "xpop"
*set test_array[5] "blue tooth"
*set test_array[6] "blades"
*set test_array[7] "blade"
*set test_array[8] "carumba"
*set test_array[9] "anecdote"
*set test_array[10] "carpool"
*temp test_array_max 15

*temp_array intermediate 15 "0."
*temp intermediate_max 15 

*temp_array result 15 ""
*temp result_max 15

Calling the function:
*gosub alphabetize "test_array" "intermediate" "result"

Now result holds the sorted values. Looping through and printing them, for example, would give:
anecdote 
blade 
blades 
blue tooth 
carpool 
carumba 
charisma 
chrismas 
xpop 
zipper
4 Likes