StepV, благодаря Вам всё таки нашел причину, прогнал на нескольких примерах и нашел ошибку, причём очень похожие фрагменты сортируются по разному:
47, 55, 57, 60, 64, 64, 60, 46 - меняет местами 60
46, 54, 57, 60, 64, 64, 60, 47 - сортирует правильно.
Сортировка этих фрагментов в итоге сводится к слиянию
47, 55, 57, 60 и 46, 60, 64, 64 в первом случае, и
46, 54, 57, 60 и 47, 60, 64, 64 во втором.
В первом случае алгоритм берёт 2 блок и сливает его с первым, в этом месте и возникает ошибка, т.к. 60 меняются местами.
Во втором случае он сливает первый блок со вторым и ошибки нет.
Получается, в первом условии нужно использовать "<=", а второе условие зависит от результата проверки первого условия, т.е.
if (x[idx[i]]<=x[idx[i+1]])
Если оно выполняется, т.е. сливается предыдущий и последующий блоки, то тоже нужно брать "<=", и всё должно работать корректно.,
но как поступать в противном случае пока не ясно. Первое, что приходит в голову, брать "<".
-- 19.08.2024, 20:06 --В общем подправил, теперь похоже стало работать корректно, по крайней мере ни одной ошибки больше не наблюдалось.