fix bugs in timsort

This commit is contained in:
2022-12-01 23:01:08 +01:00
parent d324a8435a
commit 30124c5410

View File

@@ -30,7 +30,7 @@ _int.merge() {
local i=0 j=0 k="$l" local i=0 j=0 k="$l"
while (( i < left_len && j < right_len )); do while (( i < left_len && j < right_len )); do
if (( left[i] <= right[i] )); then if (( left[i] <= right[j] )); then
_int_merge_arr[$k]="${left[$i]}" _int_merge_arr[$k]="${left[$i]}"
((i+=1)) ((i+=1))
else else
@@ -59,6 +59,8 @@ utils.timsort() {
for (( i=0; i < len; i+=32 )); do for (( i=0; i < len; i+=32 )); do
_int.insertion_sort _utils_timsort_arr "$i" "$(utils.min2 "$((i+32-1))" "$((len-1))")" _int.insertion_sort _utils_timsort_arr "$i" "$(utils.min2 "$((i+32-1))" "$((len-1))")"
done
for (( size=32; size < len; size=2*size )); do for (( size=32; size < len; size=2*size )); do
for (( left=0; left < len; left+=2*size )); do for (( left=0; left < len; left+=2*size )); do
local mid="$((left+size-1))" local mid="$((left+size-1))"
@@ -66,7 +68,6 @@ utils.timsort() {
(( mid < right )) && _int.merge _utils_timsort_arr "$left" "$mid" "$right" (( mid < right )) && _int.merge _utils_timsort_arr "$left" "$mid" "$right"
done done
done done
done
} }
utils.insertion_sort() { utils.insertion_sort() {