Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 11.11.2018, 18: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 в 19:01.
Max953121 вне форума Ответить с цитированием
Старый 11.11.2018, 18:35   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,103
По умолчанию

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

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

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

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

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

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

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

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [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 21:17


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS