# My J sort implementation in Io jsort := method(to_sort, strand_threshold, if(strand_theshold >= 40) then ( writeln("The strand threshold is larger than recommended.") ) if(to_sort size < strand_threshold) then( use := 0 ) else( use := 1 ) ret_list := List clone # Strand sort if(use == 1) then( # Pleasentries... if(to_sort size == 0) then ( return ret_list ) elseif (to_sort size == 1) then ( ret_list = to_sort at(0) return ret_list ) elseif(to_sort size == 2) then ( if(to_sort at(0) > to_sort at(1)) then ( ret_list := list(to_sort at(1), to_sort at(0)) ) else ( ret_list := list(to_sort at(0), to_sort at(1)) ) return ret_list ) sub_list := List clone while(to_sort isNotEmpty, sub_list empty sub_list append(to_sort at(0)) to_sort removeAt(0) to_sort foreach(i, if(to_sort at(i) > sub_list at(to_sort size - 1)) then ( sub_list append(to_sort at(i)) sub_list removeAt(i) ) ) # Merge the lists (isn't this slow?) while(sub_list isNotEmpty, ret_list foreach(i, if(sub_list at(0) >= ret_list at(i) and sub_list at(0) < ret_list at(i + 1)) then ( ret_list atInsert(i + 1, sub_list at(0)) sub_list removeAt(0) break ) ) ) ) return ret_list ) # Shuffle sort ) ) list := list(5, 2, 7, 2, 8, 9, 23, 7, 3, 2, 54, 93, 11, 84, 33, 193, 11, 3, 44) jsort(list, 39) list println