Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
инфа / Vse_voprosy_po_infe.docx
Скачиваний:
52
Добавлен:
31.03.2015
Размер:
263.56 Кб
Скачать

Сортировка посредством выбора

Идея сортировки с помощью выбора не сложнее двух предыдущих. На j-ом этапе выбирается элемент наименьший среди M[j]M[j+1],. . ., M[N](см. процедуру FindMin) и меняется местами с элементом M[j]. В результате после j-го этапа все элементы M[j]M[j+1],. . ., M[N]будут упорядочены.

Сказанное можно описать следующим образом:

нц для j от 1 до N-1     выбрать среди M[j],. . ., M[N] наименьший элемент и     поменять его местами с M[j] кц

Более точно:

begin    for j:=1 to N-1 do     begin          FindMin(j, i);         swap(M[j],M[i])     end  end;

В программе, как уже было сказано, используется процедура FindMin, вычисляющая индекс lowindex элемента, наименьшего среди элементов массива с индексами не меньше, чемstartindex:

procedure FindMin(startindex: integer;           var lowindex: integer);    var lowelem: ...;        u: integer;  begin    lowindex := startindex;    lowelem := M[startindex];    for u:=startindex+1 to N do      if M[u] < lowelem then         begin           lowelem := M[u];           lowindex := u         end  end;

Оценивая эффективность применения , учтите что в демонстрации сортировки выбором отсутствует пошаговое выполнение этой процедуры.

Вопрос №20

Сортировка массива. Метод прямого выбора

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

a[l]  &  а[2] < . . .& a[SIZE]

 

где SIZE — верхняя граница индекса массива.(Делфи)

Сортировка методом прямого выбора

 

Алгоритм сортировки массива по возрастанию методом прямого выбора может быть представлен так:

  1. Просматривая массив от первого элемента, найти минимальный элемент и поместить его на место первого элемента, а первый — на место  минимального.  

  2. Просматривая массив от второго элемента, найти минимальный элемент и поместить его на место второго элемента, а второй — на место минимального.    

  3. И так далее до предпоследнего элемента.

Вопрос №21

Метод прямого обмена. Алгоритм схема программа.

Алгоритм сортировки массива по возрастанию методом прямого выбора может быть представлен так:

Просматривая массив от первого элемента, найти минимальный элемент и поместить  его на место первого элемента, а первый — на место минимального.  Просматривая массив от второго элемента, найти минимальный элемент и поместить  его на место второго элемента, а второй — на место минимального.  И так далее до предпоследнего элемента.  Ниже представлена программа сортировки массива символов по возрастанию

program sort;  uses crt;  const     SIZE = 7;  var     a: array[1..SIZE] of char;     min: integer; { номер минимального элемента в части                     массива от i до верхней границы массива }     j: integer; { номер элемента, сравниваемого с минимальным }     buf: char; { буфер, используемый при обмене элементов массива }     i, k: integer;  begin     clrscr;     { ввод массива}     for i := 1 to SIZE do begin       write('El-t #', i , ': ');       readLn (a[i]);  {заполняем массив}     end;     for i := 1 to SIZE - 1 do     begin       { поиск минимального элемента в части массива от а[1] до a[SIZE]}       min := i;       for j := i + 1 to SIZE do         if a[j] < a[min] then min := j;       { поменяем местами a [min] и a[i] }       buf := a[i];       a[i] := a[min];       a[min] := buf;       { вывод массива }       for k := 1 to SIZE do         write(a[k], '; ');    writeln;     end;     writeln('Otsortirovan!!!');     readkey;  end. 

Вопрос №22

Обработка текстовой информации

В Паскале при работе с текстовой информацией существует возможность обработки одиночных символов типа Char и последовательности символов - строк типа String. Символьный тип. Тип Char - это один из базовых типов языка, предназначен для хранения и обработки одного символа.

Множеством его значений есть отдельные символы (буквы, цифры, знаки), упорядоченные в соответствии с расширенным набором символов ASCII-кода. Переменная этого типа занимает 1 байт памяти. Благодаря тому что в памяти машины символы сохраняются в виде кодов (большим считается тот символ, чей код больше), их можно сравнивать. Для символов допустимы все операции сравнения: <, <=, =,>,> =, <>. Описание данных символьного типа: Const Name1 = 'v'; - описание символьной константы, Var Name2: CHAR; - описание символьной переменной. Как правило, значение для символьных переменных и констант задаются в кавычках, например, "f", '1 ',' + '. Также можно задать значение, указав непосредственно числовое значение ASCII-кода, поставив перед этим числовым кодом знак #, например, # 35, # 102. В Паскале для работы с символьной информацией реализованы функции преобразования: CHR (N) - символ с кодом N, ORD (S) - код символа S. Также применяются функции, определяющие SUCC (S) - следующий символ, PRED (S) - предыдущий символ. Для этих функций выполняются следующие зависимости: SUCC (S) = CHR (ORD (S) +1); PRED (S) = CHR (ORD (S) -1). Для латинских букв 'a' .. 'z' выполняется функция UPCASE (S), которая переводит эти литеры в верхний регистр 'A' .. 'Z'. Строковый тип. Тип String - тип данных, предназначенный для хранения и обработки последовательности символов. Строку можно рассматривать как особую форму одномерного символьного массива. Описание данных строчного типа: Const Name1 = 'computer'; - описание строчной константы, Var Name2: STRING; - описание строчной переменной, Name3: STRING [20]; - описание строчной переменной заданной длины, По умолчанию длина строчной переменной равна 255 символам, но можно ограничить длину строки с помощью явного указания длины строки. В Паскале реализовано обработки строк двумя путями: проработка строки как единого целого и как объекта, который создается из отдельных символов. Первый путь позволяет: • присвоение строчной переменной за одну операцию целой строки символов, например, Name2: = 'computer'; Name3: = 'science'; • объединение строк в произвольном порядке с помощью операции «+» (операции связывания, объединения), например, Name3: = 'computer' + 'science'; Name3: = Name2 + Name3; • сравнение строк с помощью операций сравнения: <, <=, =,>,> =, <>, например, If Name3 <> Name2 then write ('no'); Второй путь позволяет в каждый символа строки обращаться за его номером позиции как к элементу массива по индексу, например, Name3: = Name2 [6] + Name2 [2] + Name2 [4]; Элемент с нулевым индексом содержит символ, код которого указывает на действительную длину данной строки. В Паскале реализованы процедуры и функции для обработки строк. Текущую длину строки S можно узнать с помощью функции LENGTH (S). Группа функций и процедур, направленная на проработку фрагментов строки: • функция COPY (S, N, M) - копирование фрагмента строки S длиной M, начинается с позиции N; • функция POS (S1, S) - поиск фрагмента S1 в строке S (получаем позицию, с которой начинается фрагмент S1 в строке S); • функция CONCAT (S1, S2, ...) - объединение строк S1, S2, ...; • процедура INSERT (S1, S2, M) - вставка фрагмента S1 в строку S2 с позиции M; • процедура DELETE (S1, N, M) - изъятие части строки S1 длиной M, начиная с позиции N; • процедура VAL (S, N, Code) - преобразование строки цифровых символов S в число N (параметр Code = 0, если строка S образован не из цифровых символов) • процедура STR (N, S) - преобразование числа N в строку цифровых символов S. Для сортировки символьных строк (например, по алфавиту) целесообразно создать массив символьных строк (массив типа String), что с учетом возможности использования операций сравнения для строк, позволит простым способом применять основные алгоритмы сортировки

Вопрос №23

Записи

Соседние файлы в папке инфа