Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2012, 16:07   #1
Юна New
 
Регистрация: 28.03.2012
Сообщений: 9
По умолчанию подсчитать кол-во операций для определения сложности алгоритма

Сортировка выбором
Код:
program Sort_Vybor1;
var A:array[1..100] of integer;
N,i,m,k,x : integer;

begin
write('количество элементов массива ');
read(N);
for i:=1 to n do read(A[i]);
for k:=n downto 2 do {k- количество элементов для поиска max }
begin
m:=1; { m - место max }
for i:=2 to k do if A[i]>A[m] then m:=i;
{меняем местами элементы с номером m и номером k}
x:=A[m]; A[m]:=A[k]; A[k]:=x;
end;
for i:=1 to n do write(A[i],' '); {упорядоченный массив}
end.

Подсчитать О-большое сложность алгоритма .подробно если можно

Заранее человеческое спасибо ))))
Юна New вне форума Ответить с цитированием
Старый 28.03.2012, 18:12   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Кажется очевидным, что сложность О(n^2)
Прочитайте http://en.wikipedia.org/wiki/Selection_sort#Analysis
Еще в конце этой лекции http://algcourse.cs.msu.su/wp-conten.../Lection14.pdf
и начале этой http://algcourse.cs.msu.su/wp-conten.../Lection15.pdf
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 06.04.2012, 16:34   #3
Юна New
 
Регистрация: 28.03.2012
Сообщений: 9
По умолчанию

если не сложно посмотри эти коды
Код:
program z_array;
uses crt;
var a:array[1..100] of integer;
n,i,min,max:byte;
temp:integer;
begin
clrscr;
writeln('Введите размерность массива');
readln(n);
writeln('Введите элементы массива');
for i:=1 to n do
begin
write('a[',i,']= ');
readln(a[i]);
end;
writeln('Данный массив');
for i:=1 to n do
write(a[i],' ');
min:=1;
max:=1;
for i:=2 to n do
begin
if a[i]>a[max] then max:=i;
if a[i]<a[min] then min:=i;
end;
temp:= a[min];
a[min]:=a[max];
a[max]:=temp;
writeln;
writeln('Полученный массив');
for i:=1 to n do
write(a[i],' ');
readln;
end.
Код:
const
  n = 5;
var
  Matr: array[1..n, 1..n] of integer;
  i, j: byte;
begin
  for i:=1 to n do
  begin
    for j:=1 to n do
    begin
      if (i = j) then Matr[i, j]:=1
        else Matr[i, j]:=0;
      write(Matr[i, j]:4);
    end;
    writeln;
  end;
end.

Л)
const 
  nmax=10;
type
  Tmatrix=array[1..nmax,1..nmax] of integer;
var
  a:Tmatrix;
  i,j,n:integer;
begin
  write('n=');
  readln(n);
  for i:=1 to n do
    begin
      for j:=1 to n do
        begin
          if j<=n-i+1 then
            a[i,j]:=j+i-1
          else
            a[i,j]:=0;
          write(a[i,j]:4);
        end;
      writeln;
    end;
end.
Код:
{ сортировка пузырьковым (обменом) методом}

procedure Bubble(var item: DataArray; count:integer);
var
  i,j : integer;
  x : DataItem;
begin
  for i := 2 to count do
    begin
      for j := count downto i do
        if item[j-1]>item[j] then
          begin
            x := item[j-1];
            item[j-1] := item[j];
            item[j] := x;
          end;
    end;
end; {конец сортировки пузырьковым методом}
Код:
uses crt;
const max=100;
var a:array[1..max] of integer;
    n,i,j,k,imx:byte;
    b:integer;
begin
clrscr;
randomize;
repeat
write('Размер массива n=');
readln(n);
until n in [1..max];
writeln('Исходный массив:');
for i:=1 to n do
 begin
  a[i]:=random(50)-25;
  write(a[i]:4);
 end;
writeln;
imx:=1;
for i:=1 to n do
if a[i]>a[imx] then imx:=i;
writeln('Максимальный элемент=',a[imx],' номер=',imx);
for i:=imx to n-1 do
a[i]:=a[i+1];
n:=n-1;
writeln;
writeln('Сортировка по убыванию модулей:');
for i:=1 to n do
write(a[i]:4);
writeln;
writeln;
write('Введите число b=');
readln(b);
n:=n+1;
if abs(b)<=abs(a[n-1]) then a[n]:=b
else
 begin
  for i:=1 to n-1 do
   if abs(a[i])<=abs(b) then
    begin
     for j:=n downto i+1 do
     a[j]:=a[j-1];
     a[i]:=b;
     break;
    end;
 end;
writeln('Вставка элемента:');
for i:=1 to n do
write(a[i]:4);
readln
end.
Код:
var a:array[1..100]of integer;
i,n,l,r,temp:integer;
begin
read(n);
for i:=1 to n do read(a[i]);
l:=1;
for i:=1 to (n div 2) do if a[i]<a[l] then l:=i;
r:=(n div 2)+1;
for i:=(n div 2)+1 to n do if a[i]>=a[r] then r:=i;
for i:=l+1 to ((l+r) div 2) do begin
 temp:=a[i];
 a[i]:=a[r+l-i];
 a[r+l-i]:=temp;
end;
for i:=1 to n do write(a[i],' ');
readln;
end.
Код:
uses crt;
const nmax=20;
var c:array[1..nmax,1..nmax] of char;
    a:array[char] of integer;
    n,m,i,j,k:byte;
    s:char;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' m=');
readln(m);
until m in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to n do
 begin
  for j:=1 to m do
   begin
    {возьмем только цифры и латинские буквы, а то много будет}
    repeat
     k:=random(75)+48;
    until k in [48..57,65..90,97..122];
    c[i,j]:=chr(k);
    write(c[i,j]:2);
   end;
  writeln;
 end;
writeln;
for s:=#48 to #122 do
a[s]:=0;
for i:=1 to n do
for j:=1 to m do
inc(a[c[i,j]]);
k:=0;
writeln('Разные элементы массива:');
for s:=#48 to #122 do
if a[s]>0 then
 begin
  write(s,' ');
  k:=k+1;
 end;
writeln;
write('Всего разных элеметов=',k);
readln
end.

не суди строго , просто мне до этого всего как до Китая (хотя я оттуда родом=) )

Это очень важно...
Юна New вне форума Ответить с цитированием
Старый 06.04.2012, 19:24   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

А что с ними нужно сделать?
(пронумеруй условия, для облегчения общения)
1-я: поиск минимума и максимума за O(n) (одинарный проход по массиву)
2-я: заполнение матрицы за O(n^2)
3-я: опять заполнение матрицы за O(n^2) (код в том же блоке, что и 2-ой)
4-я: у сортировки пузырьком сложность O(n^2) (правда, не понял, почему такие диапазоны у i и j)
5-я:
6-я: поиск наименьшего в первой половине массива за O(n/2)
поиск наибольшего во второй половине массива за O(n/2)
Переворот массива за O((r-l)/2-1)
7-я:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 06.04.2012 в 19:37.
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кол-во операций за секунду С++ crawter Помощь студентам 1 18.03.2012 07:58
подсчитать кол-во цифр С++ Дмитрий Алексеев Помощь студентам 4 06.05.2011 11:28
макрос - подсчитать для каждой строки кол-во ячеек с «+», кол-во ячеек с «-» Vadim_abs Microsoft Office Excel 36 14.07.2009 12:08
подсчитать кол-во гласных FireHawK Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 22.11.2008 19:22