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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2018, 17:21   #1
Max953121
 
Регистрация: 11.11.2018
Сообщений: 3
По умолчанию Быстрая сортировка. В чем ошибка?

Код:
Program Bistraia;
const n=600;
var i : integer;
var a:array[1..n] of integer;
procedure QSort(first, last: Integer ); 
var l, r, c, x: integer;
begin
  if first < last then begin
    a[i]:=a[(first + last) div 2]; //Ошибка времени выполнения: Индекс находился вне границ массива
    l:=first; r:=last;
    while l <= r do begin
      while a[l] < x do l:=l+1;
      while a[r] > x do r:=r-1;
      if l <= r then begin
        c:=a[l]; a[l]:=a[r]; a[r]:=c;
        l:=l+1; r:=r-1;
      end;
    end;
    QSort(first, r); QSort( l, last);
    end;    
end;
begin
randomize;
for i:=1 to n do begin
  a[i]:=random(5000+6500+1)-6500;
  write(a[i], ' ');
end;
writeln('Нажмите любую кнопку для продолжения');
readln();
for i:=1 to n do
 QSort(a[i],a[n]);
writeln('Нажмите любую кнопку для продолжения');
readln();
for i:=1 to n do
  write(a[i], ' '); 
end.
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 11.11.2018 в 18:01.
Max953121 вне форума Ответить с цитированием
Старый 11.11.2018, 17:35   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

В том, что вы передаете сами элементы, а не индексы, как ожидает функция:
Код:
QSort(a[i],a[n]);
p51x вне форума Ответить с цитированием
Старый 11.11.2018, 18:33   #3
Max953121
 
Регистрация: 11.11.2018
Сообщений: 3
По умолчанию

Исправил, теперь "Ошибка времени выполнения: StackOverflowException: Программа завершена из-за переполнения программного стека"
Max953121 вне форума Ответить с цитированием
Старый 11.11.2018, 18:50   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну что вы хотели... рекурсия это веселое дело. Увеличивайте стек или уменьшайте кол-во элементов.
p51x вне форума Ответить с цитированием
Старый 11.11.2018, 18:54   #5
Max953121
 
Регистрация: 11.11.2018
Сообщений: 3
По умолчанию

Хорошо, спасибо за помощь))
Max953121 вне форума Ответить с цитированием
Старый 11.11.2018, 20:11   #6
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Возможно, что переполнение стека из-за того, что перед завершением процедуры рекурсивный вызов должен быть по условию.
Код:
if first<r then
  QSort(first, r);
if last>l then
  QSort(l, last);
FPaul вне форума Ответить с цитированием
Старый 11.11.2018, 20:19   #7
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Нет.
Вы вместо x инициализируете элемент массива
Код:
  if first < last then begin
    a[i]:=a[(first + last) div 2]; //Ошибка времени выполнения: Индекс находился вне границ массива
На этом месте должен был быть x.
FPaul вне форума Ответить с цитированием
Старый 11.11.2018, 20:25   #8
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от Max953121 Посмотреть сообщение
Хорошо
Плохо. Ваша программа неработоспособна.

Похоже, Вы совсем не понимаете логику алгоритма.
Иначе трудно объяснить, почему Вы используете переменные, которым не присвоено значение. Откуда вдруг возникают i, x?

Посмотрите код на Розетте, может, станет более понятно
Black Fregat вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Быстрая сортировка. Где-то ошибка jeeeezy Помощь студентам 0 10.12.2011 00:57
не получается сортировка матрицы в чем ошибка? Darki Паскаль, Turbo Pascal, PascalABC.NET 5 23.06.2010 00:26
быстрая сортировка настолько быстрая Serg12 Помощь студентам 8 28.03.2010 21:31
[Pacsal] Быстрая Соритровка и сортировка обменом (ошибка) Dtska Помощь студентам 1 17.12.2009 20:17