Объявление и инициализация матрицы
Объявление и инициализация матрицы аналогичны описанным выше способам работы с векторами. То есть в разделе VAR переменным отводится место, а начальное значение этих величин специально не устанавливается. Поэтому после объявления массива необходимо его элементам задать необходимые значения. Используется три способа инициализации двумерного массива.
CONST
CONST
FOR I := 1 ТО М Понятие сортировки. Алгоритмы сортировки. Алгоритм сортировки — это алгоритм для упорядочения элементов в списке. В случае, когда элемент списка имеет несколько полей, поле, служащее критерием порядка, называется ключом сортировки. На практике в качестве ключа часто выступает число, а в остальных полях хранятся какие-либо данные, никак не влияющие на работу алгоритма. каждый алгоритм сортировки состоит из трех основных частей:
Пузырьковая сортировка Операция сравнения/перестановки выполняется для каждых двух стоящих рядом элементов. После первого прохода по массиву "вверху" оказывается самый "легкий" элемент. Следующий цикл сортировки выполняется начиная со второго элемента, в результате чего вторым в массиве оказывается второй наименьший по величине элемент, и так далее. Сортировка выбором Во время i-го прохода по массиву выявляется наименьший элемент, который затем меняется местами с i-м. Сортировка Шелла Основная идея алгоритма заключается в том, чтобы вначале устранить массовый беспорядок в массиве, сравнивая далеко стоящие друг от друга элементы. Сортировка Хоора Суть метода заключается в том, чтобы найти такой элемент множества, подлежащего сортировке, который разобьет его на два подмножества: те элементы, что меньше делящего элемента, и те, что не меньше его. Для массива из 10 чисел установим два индекса: на первый (i) и на последний (j) элементы. 10 7 28 49 31 25 17 3 14 43 i <--j step==-1На каждом шаге будем изменять значение индекса j на значение step (вначале оно равно -1, индекс уменьшается), т.е. двигать j влево. Мы будем делать так в том случае, если j-й элемент больше, чем i-й элемент. Если это условие не выполнено - поменяем местами i-й и j-й элементы массива и сами индексы i и j, а также изменим знак у значения step -- оно станет равным +1: 3 7 28 49 31 25 17 10 14 43 j--> i step==+1Продолжим процесс: теперь j движется вправо, и изменится условие - сейчас для продолжения процесса необходимо, чтобы j-й элемент был меньше i-го. Будем продолжать вышеописанный процесс до тех пор, пока индексы i и j не станут одинаковыми. В этот момент можно утверждать, что i-й (он же и j-й) элемент разделил исходное множество на два подмножества: все элементы, находящиеся слева от делящего элемента, меньше его, и все элементы, находящиеся справа, не меньше делящего (i-го) элемента. Получилось, что i-й элемент стоит на своем месте: 3 7 10 49 31 25 17 28 14 43 ijТаким образом, мы описали процедуру нахождения расположения одного элемента. Иными словами, мы "отсортировали" один элемент множества. Такая же процедура применима к элементам "левого" и "правого" подмножеств, которые на данный момент еще не отсортированы. Условие завершения нашей рекурсивной процедуры - совпадение границ, которое эквивалентно тому, что в множестве остался один элемент. void sort_hoor(int a[], int l, int r) // сортировка Хоора { int i=l, j=r, step=-1, condition=1; if (l>=r) return; // сортировать нечего do { // сортируем с левой границы до правой if (condition == less(a[j],a[i])) { swap(a[i], a[j]); // перестановка чисел swap(i, j); // обмен местами индексов step = -step; // теперь - в другую сторону condition = !condition; // обмен условия на противоположное } j += step; // передвинем индекс } while (j!=i); // пока индексы не сойдутся sort_hoor(a, l, i-1); // левое подмножество sort_hoor(a, i+1, r); // правое }QuickSort По существу является разновидностью сортировки Хоора, но программная реализация немного красивее и быстрее. Основное отличие - за делящий элемент всегда выбирается середина массива. void sort_quick(int a[], int l, int r) // QuickSort { int i=l, j=r, x=a[(l+r)/2]; do { while (less(a[i],x)) i++; while (less(x,a[j])) j--; if (i<=j) { swap(a[i], a[j]); i++; j--; }; } while (i<j); if (l<j) sort_quick(a,l,j); if (i<r) sort_quick(a,i,r); }
Популярное: Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (777)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |