в моей программе Dafny у меня есть массив input:array?<int>
с четной длиной, который я хочу разрезать на две равные части, отсортировать их по отдельности и затем объединить в упорядоченном порядке. (сортировка вставками в уже реализованном и проверенном массиве целых чисел). нарезка и слияние в Dafny с seq<int>
очень просты, а полная документация по ним находится в rise4fun. но я не мог найти простой подход к массивам. Как проще всего сделать то же самое, что и последовательности с массивом?
method MySort(input:array?<int>)
{ var mid:= input.Length/2;
var subOne := input[0..mid];
var subTwo := input[mid..input.Length];
insertionSort(subOne); // ofcourse ERROR as insertion sort is implemented for array<int>
insertionSort(subTwo); // ofcourse ERROR as insertion sort is implemented for array<int>
input := subTwo + subOne;
}
полный код находится здесь, вrise4fun, в этом коде я закомментировал подход к последовательности и сделал некоторые нарезки с циклом while. если это лучший способ сделать, как мне потом выполнить конкатенацию.
Также Здесь я сделал метод сортировки с seq<int>
, но в части обмена (input[j := b]; input[j-1 := a];
) я также получаю expected method call, found expression
. Согласно учебнику input[j:=b]
следует заменить индекс j ввода seq значением b