« Предыдущий пост | На главную страницу | Следующий пост »

Пример работы функции Sort() - сортировки методом пузырька

В прошлом выпуске я привел исходный код функции Sort() глобального массива, которая осуществляет сортировку методом пузырька.

На мой взгляд, подробно разбирать ее не имеет смысла, т.к. она содержит много комментариев. Проблема с пониманием может возникнуть только на этом участке кода:

    int i, up_idx;
for (up_idx=count; up_idx>1; up_idx--) { // обработаем участок массива 1..up_idx for (i=1; i<up_idx; i++) { // m1 - элемент i // m2 - элемент i+1 double m1 = GlobalVariableGet(array+DoubleToStr(i, 0)); double m2 = GlobalVariableGet(array+DoubleToStr(i+1, 0));
bool is_sorted; // если true, то не надо переставлять элементы is_sorted = true;
if (is_asc_order) { // сортируем по возрастанию if (m1>m2) is_sorted = false; } else { // сортируем по убыванию if (m1<m2) is_sorted = false; }
// переставим элементы местами if (is_sorted) continue; if (GlobalVariableSet(array+DoubleToStr(i, 0),m2)==0) { // произошла ошибка при изменении элемента
... return(false); } if (GlobalVariableSet(array+DoubleToStr(i+1, 0),m1)==0) { // произошла ошибка при изменении элемента
... return(false); } } }

Понять, что же делает этот кусок кода будет полегче, если Вы еще раз прочитаете описание алгоритма сортировки методом пузырька. Для облегчения Вашей задачи я приведу пример.

Допустим, что у нас есть неотсортированный массив и мы хотим его отсортировать по убыванию.

№ элементаИсходное состояниеПосле шага 1После шага 2После шага 3После шага 4После шага 5
68922222
52897777
445789888
37458892424
28845248945
1242424454589

Под "шагами" здесь понимается "внешний" цикл for (up_idx=count; up_idx>1; up_idx--).

Во внутреннем же цикле, например, на первом шаге мы осуществляем следующие действия:

  1. Сравниваем первый элемент (24) и второй (8). Т.к. они расположены по убыванию, то ничего с ними не делаем.
  2. Сравниваем второй элемент (8) и третий (7). Т.к. они расположены по убыванию, то ничего с ними не делаем.
  3. Сравниваем третий элемент (7) и четвертый (45). Т.к. они не расположены по убыванию, то поменяем их местами.
  4. Сравниваем новый четвертый элемент (7) и пятый (2). Т.к. они расположены по убыванию, то ничего с ними не делаем.
  5. Сравниваем пятый элемент (2) и шестой (89). Т.к. они расположены по убыванию, то ничего с ними не делаем.
  6. Сравниваем первый элемент (24) и второй (8). Т.к. они не расположены по убыванию, то поменяем их местами.

Результат первого шага изображен в таблице.

По аналогии мы проходим наш массив еще 4 раза (четыре шага) и получае массив, отсортированный по убыванию.



Все статьи по теме "Пишем советников для MetaTrader 4".

« Предыдущий пост | На главную страницу | Следующий пост »

Подписаться на мою рассылку



Размещение статьи "Пример работы функции Sort() - сортировки методом пузырька" на Вашем сайте

Размещение статьи "Пример работы функции Sort() - сортировки методом пузырька" на Вашем сайте возможно при условии выполнениия следующих условий:

  • Запрещается изменение оригинального текста без согласия автора - Андрея Ведихина.
  • Должен быть указан первоисточник. В случае публикации в интернете Вы должны разместить следующий код гиперссылки без изменений:
  • Запрещается коммерческое использование материалов, взятых с блога "Интернет-трейдинг на форекс / forex". Доступ к ним должен быть свободным, без взимания какой-либо платы, без обязательной регистрации и/или заполнения опросного листа (анкеты) и т.д.

В случае выполнения данных условий не требуется согласия автора блога "Интернет-трейдинг на форекс / forex" на размещение статьи "Пример работы функции Sort() - сортировки методом пузырька" на Вашем сайте.

Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE
Котировки Forex:

Счетчики:

Авторские права © 2005-2006 Андрей Ведихин

Условия использования материалов блога "Интернет-трейдинг на форекс / forex"

Контакты с автором:


Движок сайта:
Movable Type 5.04