Sort the letters of string in alphabetical order: Difference between revisions

Content added Content deleted
(→‎{{header|F_Sharp|F#}}: Added Turkish)
Line 235: Line 235:


=={{header|Julia}}==
=={{header|Julia}}==
<lang julia>function mergesort!(array)
<lang julia>function mergesort!(array, lt = <, low = 1, high = length(array), tmp=similar(array, 0))
high <= low && return array
middle = div(length(array), 2)
middle == 0 && return array
middle = low + div(high - low, 2)
(length(tmp) < middle - low + 1) && resize!(tmp, middle - low + 1)


mergesort!(@view array[begin:middle])
mergesort!(array, lt, low, middle, tmp)
mergesort!(@view array[middle+1:end])
mergesort!(array, lt, middle + 1, high, tmp)


i, j = 1, low
merge!(array[begin:middle], array[middle+1:end], array)
return array
while j <= middle
tmp[i] = array[j]
end
i += 1
j += 1
end


i, k = 1, low
function merge!(arr1, arr2, ret)
left, right, i = 1, 1, 1
while k < j <= high
if lt(array[j], tmp[i])
while left <= length(arr1) && right <= length(arr2)
if arr1[left] <= arr2[right]
array[k] = array[j]
ret[i] = arr1[left]
j += 1
i += 1
left += 1
else
else
ret[i] = arr2[right]
array[k] = tmp[i]
i += 1
i += 1
right += 1
end
end
k += 1
end
end


if left <= length(arr1)
while k < j
ret[i:end] .= arr1[left:end]
array[k] = tmp[i]
end
k += 1
if right <= length(arr2)
i += 1
ret[i:end] .= arr2[right:end]
end
end
return array
end
end


mergesort(arr) = mergesort!(deepcopy(arr))
mergesort(str::String) = String(mergesort!(collect(str)))
mergesort(str::String) = String(mergesort(collect(str)))


function testmergesort(s::String, stripws= true)
function testmergesort(s::String, stripws= true)