Сортировка массива
Сортировка массива позволяет упорядочить входящие в него элементы по возрастанию или по убыванию. При данном методе сортировки самый большой или самый маленький элемент в массиве меняется местами с первым элементом массива. После этого следующий по размеру элемент меняется местами с вторым элементом в массиве и т.д. Процесс повторяется до полной сортировки массива. Покажем на примере создание индикатора, основанного на массиве, а также процесс сортировки массива по возрастанию. Код программы имеет вид:
{Индикатор AvgRange < 40} Input: RngeLvl(40); Vars: j(0), k(0), Mins(0), MinIdx(0), Temp(0); Array: Rnge[50](0);
If Range < RngeLvl Then Begin j = j + 1; k = Mod(j, 50); Rnge[k] = Range; If j >= 50 Then Begin Value2 = 0; For k = 0 to 49 Begin Value2 = Value2 + Rnge[k] End; Plot1(Value2/50, "Average Range"); End; End;
If LastBarOnChart Then Begin For k = 0 to 48 Begin Mins = Rnge[k]; MinIdx = k; For j = k + 1 to 49 Begin If Rnge[j] < Mins Then Begin Mins = Rnge[j]; MinIdx = j; End; End;
{Перемена мест элементов}
If Mins < Rnge[k] Then Begin Temp = Rnge[k]; Rnge[k] = Mins; Rnge[MinIdx] = Temp; End; End; End;
В данном виде два циклических оператора For используются для проведения сортировки. Внешний цикл выполняется 49 раз (на один меньше, чем количество элементов в массиве), поскольку переменная k меняет значения от 0 до 48. Значение элемента с номером k присваивается переменной Mins и становится элементом для обмена местами. Значение переменной k присваивается переменной MinIdx. Внутренний цикл будет выполняться для оставшихся в рассмотрении элементов. Для работы внутреннего цикла необходимо, чтобы значение переменной-счетчика j было на 1 больше, чем значение переменной k, т.е. k+1. Когда будет найдено новое минимальное значение, то оно и его номер помещаются в переменные Mins и MinIdx. Когда завершается внутренний цикл, происходит перемена местами элементов при помощи переменной Temp. Текущее значение выбранного элемента массива (который имеет номер k) присваивается переменной Temp. Затем минимальное значение, помещенное в переменную Mins, присваивается выбранному элементу массива (с номером k). Затем значение, сохраненное в переменной Temp, присваивается освобожденному элементу массива (который имеет номер MinIdx). |