Детёныши ВП

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Детёныши ВП » Целочисленная арифметика » Поиск и сортировки


Поиск и сортировки

Сообщений 1 страница 4 из 4

1

Код:
{ сортировка массива "пузырьком" по возрастанию }

var a:array[1..n] of integer;
    i,j,x:integer;
begin
  readln(n);    
 writeln('введите ',n,' элементов массива');
     for i:=1 to n do readln( a[i] );

     for i:=1 to n-1 do begin
         for j:=1 to n-i do begin
           if a[j]>a[j+1] then begin
              x:=a[j]; a[j]:=a[j+1]; a[j+1]:=x;
           end;
         end;
     end;
     writeln('после сортировки:');
     for i:=1 to n do writeln( a[i] );
end.

0

2

эта сортировка по убыванию, если кто хочет по возрастанию, то в ифе  знак больше замените на меньше ;)

0

3

ну да

0

4

Бинарный поиск (Дихотомия, двоичный поиск)
Смысл этого поиска в том, чтобы в массиве отсортированном по возрастанию найти номер числа x. Применяя этот поиск можно гораздо быстрее простого перебора это сделать. Этот поиск работает следующим образом: каждый раз мы сужаем область поиска в 2 раза.

Код:
var 
n, x, l, r, f, m, i: longint;
a : array[1..1000] of longint;
begin
readln(n, x); {ввод кол-ва чисел и число номер которого требуется найти}
for i := 1 to n do
       read(a[i]);
l := 1; {левый показатель границы поиска}
r := n; {правый показатель границы поиска}
f := 0; {флажок, если он 0, то мы ещё не нашли число, можно заменить переменной типа boolean}
while (f = 0) and (r >= l) do  {пока мы не нашли число и пока ещё есть где искать мы делаем следующее}
            begin
            m := (l + r) div 2; {нашли серединку в области поиска}
            if a[m] = x then
                   f := 1
            else if a[m] > x then r := m - 1
                   else l := m + 1; {если мы нашли это число, тогда флажок вверх, иначе если это число меньше числа посередине нашей области, то правую границу нам надо сдвинуть к этой серединке, но на 1 число влево, иначе левую границу сдвинуть к серединке, но на число вправо}
            end;
if (f = 1) then
      writeln(m)
else
      writeln('Данного числа в массиве нет'); {вывод}
end.

+1


Вы здесь » Детёныши ВП » Целочисленная арифметика » Поиск и сортировки