![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Anatolik174 |
![]() ![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Реальное имя: Антон Репутация: ![]() ![]() ![]() |
Ребят у меня такая проблема нам учитель задал написать 3 сортировки, дал книгу(которую я почитал) но реализацию не объяснил (да собственно говоря он никогда ничего не объяснял толком). У меня трудности заключаются в написании самих сортировок. Помогите Please написать сортировки(Пирамидальная сортировка, Быстрая сортировка, Сортировка за линейное время ).
Я написал массив и его генерацию. Код const N = 10; type arr = array [0..N - 1] of integer; var a: arr; ///Генерирование массива function rand: arr; var i: integer; begin randomize; for i := 0 to (N - 1) do result[i] := random(100); end; ///Вывод массива procedure print(a: arr); var i: integer; begin for i := 0 to (N - 1) do write(a[i], ' '); end; |
![]() ![]() |
Anatolik174 |
![]()
Сообщение
#2
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Реальное имя: Антон Репутация: ![]() ![]() ![]() |
Спасибо поиск оказался полезным узнал много нового но и появились 2 проблемы. Вот например есть у меня сортировка простым выбором
Код const N = 10; type arr = array [0..N - 1] of integer; var a: arr; ///Генерирование массива function rand: arr; var i: integer; begin randomize; for i := 0 to (N - 1) do result[i] := random(100); end; ///Вывод массива procedure print(a: arr); var i: integer; begin for i := 0 to (N - 1) do write(a[i], ' '); end; /// сортировка массива procedure sorting (a: arr); var min, i, k, j: integer; begin for i := 0 to N - 1 do begin min := a[i]; k := i; for j := i + 1 to N - 1 do if a[j] < min then begin k := j; min := a[j]; end; a[k] := a[i]; a[i] := min; writeln; print(a); end; end; begin a := rand; print(a); sorting(a); end. И когда её запускаешь то она пишет в решении массив и сортировку этого массива. Например 83 30 13 85 8 58 0 30 64 36 0 30 13 85 8 58 83 30 64 36 0 8 13 85 30 58 83 30 64 36 0 8 13 85 30 58 83 30 64 36 0 8 13 30 85 58 83 30 64 36 0 8 13 30 30 58 83 85 64 36 0 8 13 30 30 36 83 85 64 58 0 8 13 30 30 36 58 85 64 83 0 8 13 30 30 36 58 64 85 83 0 8 13 30 30 36 58 64 83 85 0 8 13 30 30 36 58 64 83 85 И вот я написал точнее скопировал и подредактировал две сортировки Пирамидальная сортировка Код const N = 10; type arr = Array[0 .. N-1] Of Integer; var a: arr; ///Генерирование массива function rand: arr; var i: integer; begin randomize; for i := 0 to (N - 1) do result[i] := random(100); end; ///Вывод массива procedure print(a: arr); var i: integer; begin for i := 0 to (N - 1) do write(a[i], ' '); end; /// сортировка массива Procedure HeapSort(Var ar: arr; n: Integer); Var Left, Right: integer; x: Integer; Procedure sift; Var i, j: Integer; Begin i := Left; j := 2*i; x := ar[i]; While j <= Right Do Begin If j < Right Then If ar[j] < ar[Succ(j)] Then Inc(j); If x >= ar[j] Then Break; ar[i] := ar[j]; i := j; j := 2 * i End; ar[i] := x End; Var T: Integer; Begin Left := Succ(n div 2); Right := n; While Left > 1 Do Begin Dec(Left); sift End; While Right > 1 Do Begin T := ar[ Left ]; ar[ Left ] := ar[ Right ]; ar[ Right ] := T; Dec(Right); sift end End; begin a := rand; print(a); end. Быстрая сортировка Код const N = 10; Type arr = Array[0 .. N-1] Of Integer; var a: arr; ///Генерирование массива function rand: arr; var i: integer; begin randomize; for i := 0 to (N - 1) do result[i] := random(100); end; ///Вывод массива procedure print(a: arr); var i: integer; begin for i := 0 to (N - 1) do write(a[i], ' '); end; /// сортировка массива Procedure merge(Var ar: arr; n: Integer); Procedure Slit( k, q: Integer ); Var m: Integer; i, j, T: Integer; d: arr; Begin m := k + (q-k) div 2; i := k; j := Succ(m); t := 1; While (i <= m) and (j <= q) Do Begin If ar[i] <= ar[j] Then Begin d[T] := ar[i]; Inc(i) End Else Begin d[T] := ar[j]; Inc(j) End; Inc(T) End; While i <= m Do Begin d[T] := ar[i]; Inc(i); Inc(T) End; While j <= q Do Begin d[T] := ar[j]; Inc(j); Inc(T) End; For i := 1 to Pred(T) Do ar[Pred(k+i)] := d[i] End; Procedure Sort(i, j: Integer); Begin If i >= j Then End; var j,i,T:integer; Begin If j-i = 1 Then Begin If ar[j] < ar[i] Then Begin T := ar[i]; ar[i] := ar[j]; ar[j] := T End End Else Begin Sort(i, i + (j-i) div 2); Sort(i + (j-i) div 2 + 1, j); Slit(i, j) End; End; begin a := rand; print(a); end. Но не одна из этих сортировок не сортирует массивы. Помогите найти ошибочки. |
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 23:34 |