![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
CORS@R |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Реальное имя: Рамиль Репутация: ![]() ![]() ![]() |
Для метода пузырька, вставок и выбора посчитать число сравнений и число перестановок. Для метода пузырька я это сделал но для метода вставок не знаю как посчитать сравнения а для метода выбора - число перестановок. Помогите пожалуйста
Забыл написать что должно получиться для массива 15-33-42-07-12-19: метод вставок 12 сравнений и 8 перестановок, метод выбора 15 сравнений, 4 перестановки Сообщение отредактировано: CORS@R - 19.02.2006 0:06 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
метод вставки - элементарно:
procedure vstavka; Сейчас гляну метод выбора... |
CORS@R |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Реальное имя: Рамиль Репутация: ![]() ![]() ![]() |
За метод вставок спасибо
![]() |
CORS@R |
![]()
Сообщение
#4
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Реальное имя: Рамиль Репутация: ![]() ![]() ![]() |
С этим выбором ну никак не получается, получается только или 5 или 6. А должно быть 4.
|
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
procedure vybor; |
CORS@R |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Реальное имя: Рамиль Репутация: ![]() ![]() ![]() |
Danke
![]() |
CORS@R |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Реальное имя: Рамиль Репутация: ![]() ![]() ![]() |
Препод сказал что нужно сделать тоже самое и для улучшенных методов.
Код uses crt; const n=15; var a:array [1..n] of integer; b:array [1..n] of integer; peres,srav:longint; i:integer; otv:char; procedure menu; begin writeln('1-Puzyrek'); writeln; writeln('2-Vstavka'); writeln; writeln('3-Vybor'); writeln; writeln('4-Shell'); writeln; writeln('5-Bystraya sortirovka'); writeln; writeln('6-Piramida'); writeln; writeln('7-Sozdat massiv'); writeln; writeln('8-Exit'); writeln; otv:=readkey; end; procedure vyvod; begin writeln('Ishodnyj massiv'); writeln; for i:=1 to n do write(' ',b[i]); writeln; writeln; writeln('Posle sortirovki'); writeln; for i:=1 to n do write(' ',a[i]); writeln; writeln; end; function sravnenie(a, b: integer): boolean; begin inc(srav); sravnenie := a < b; end; procedure sozd_mas; var i:integer; begin writeln('vvedite elem mas'); for i:=1 to n do readln(b[i]); writeln('Massiv sozdan'); writeln; end; procedure puzyr; var i,j,temp:integer; begin writeln; writeln(' METOD ny3bIpbKA '); writeln; peres:=0; srav:=0; for i:=1 to n do a[i]:=b[i]; for i := 2 to n do begin for j:=n downto i do begin inc(srav); if a[j-1] > a[j] then begin temp := a[j-1]; a[j-1] := a[j]; a[j] := temp; inc(peres); end; end; end; vyvod; writeln('Chislo perestanovok = ',peres); writeln('Chislo sravneniy = ',srav); writeln; readln; end; procedure vstavka; var i,j,temp:integer; begin writeln; writeln(' METOD BCTABOK'); writeln; peres:=0; srav:=0; for i:=1 to n do a[i]:=b[i]; for i:=2 to n do begin temp:=a[i]; j:=i-1; While (j>0) and (sravnenie(temp, a[j])) do begin a[j+1]:=a[j]; dec(j); inc(peres); end; a[j+1]:=temp; end; vyvod; writeln('Chislo perestanovok = ',peres); writeln('Chislo sravneniy = ',srav); writeln; readln; end; procedure vybor; var i,j,k,temp:integer; begin writeln; writeln('METOD BbI6OPA'); writeln; peres:=0; srav:=0; for i:=1 to n do a[i]:=b[i]; for i:=1 to n-1 do begin k:=i; temp:=a[i]; for j:=i+1 to n do begin inc(srav); if a[j]<temp then begin k:=j; temp:=a[j]; end; end; a[k]:=a[i]; if k<>i then inc(peres); a [i]:=temp; end; vyvod; writeln('Chislo perestanovok = ',peres); writeln('Chislo sravneniy = ',srav); writeln; readln; end; procedure Shell; var h:array [1..n] of integer; t,m,i,j,k,temp:integer; begin writeln; writeln(' METOD Shella '); writeln; peres:=0; srav:=0; for i:=1 to n do a[i]:=b[i]; write('Chislo shagov: '); readln(t); for i:=1 to t do begin write(i,'-y shag = '); readln(h[i]); end; for m:=1 to t do begin k:=h[m]; for i:=k+1 to n do begin temp:=a[i]; j:=i-k; while (j>0) and (temp<a[j]) do begin a[j+k]:=a[j]; dec(j,k); inc(srav); end; a[j+k]:=temp; inc(peres); end; end; vyvod; writeln('Chislo perestanovok = ',peres); writeln('Chislo sravneniy = ',srav); writeln; readln; end; Procedure QuickSort(left,right:integer); var i,j:integer; sred,temp:integer; begin i:=left; j:=right; sred:=a[(left+right) div 2]; repeat while (a[i]<sred) do begin inc(i); inc(srav); end; while (a[j]>sred) do begin dec(j); inc(srav); end; if i<=j then begin temp:=a[i]; a[i]:=a[j]; a[j]:=temp; inc(i); dec(j); inc(srav); end; until i>j; if left<j then begin inc(peres); QuickSort(left,j); end; if i<right then begin inc(peres); QuickSort(i,right); end; end; Procedure Sito(al,ar:word); var i,j,x:integer; begin i:=al; j:=2*al; x:=a[al]; inc(srav); if (j<ar) and (a[j+1]>a[j]) then inc(j); while (j<=ar) and (a[j]>x) do begin a[i]:=a[j]; i:=j; j:=2*j; inc(srav); inc(peres); if (j<ar) and (a[j+1]>a[j]) then begin inc(j); inc(srav);; end; end; a[i]:=x; end; procedure piramida; var left,right,temp:integer; begin left:=(n div 2)+1; right:=n; while left>1 do begin left:=left-1; Sito(left,right); end; while right>1 do begin temp:=a[1]; inc(srav); inc(peres); a[1]:=a[right]; a[right]:=temp; right:=right-1; Sito(left,right); end; end; begin clrscr; randomize; repeat begin menu; case otv of '1':puzyr; '2':vstavka; '3':vybor; '4':Shell; '5':begin writeln; writeln(' METOD Bystroy sortirovki '); writeln; peres:=0; srav:=0; for i:=1 to n do a[i]:=b[i]; QuickSort(1,n); vyvod; writeln('Chislo perestanovok = ',peres); writeln('Chislo sravneniy = ',srav-1); writeln; readln; end; '6':begin writeln; writeln('Piramidalnaya sortirovka'); writeln; peres:=0; srav:=0; for i:=1 to n do a[i]:=b[i]; piramida; vyvod; writeln('Chislo perestanovok = ',peres); writeln('Chislo sravneniy = ',srav); writeln; readln; end; '7':sozd_mas; '8':end; end; until otv='8'; end. Исходный массив для метода Шелла: 15 33 42 7 12 19. 2 шага шруппировки: 3 и 1. должно быть 8 сравнений и 5 перестановок. Для быстрой сортировки: 13 42 28 17 9 25 47 31 39 15 20. 22 сравнения и 6 перестановок. Считает все правильно но может быть результаты подогнаны? Для пирамидалььной сортировки: 45 40 28 25 30 44 33 22 60 15 55 47 66 20 50. 73 сравнения и 49 перестановок. Помогите пожалуйста посчитать сравнения и перестановки. Заранее спасибо |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Ты мне можешь объяснить, ЗАЧЕМ ты постишь программу целиком? Что, у нас нет этих методов сортировки? А вдруг у тебя они сбоят? А придет человек, скопирует ТВОЙ метод (из-за заголовка), у него не сработает, и он будет засыпать МЕНЯ (как модератора) гневными письмами "Отстой! Не работает! Фтопку такой сайт!"
А ведь в FAQ-е примеры тестируются не 1 и даже не 100 раз, и на любых значениях... |
CORS@R |
![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Реальное имя: Рамиль Репутация: ![]() ![]() ![]() |
Программа работает. Она же все таки сортирует, но как сосчитать перестановки и сравнения? В примерах в факе нет этого или я просто не вижу
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 3:03 |