IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Проблема с QuickSort
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: Иван

Репутация: -  7  +


Проблема в следующем: при выполнении у меня "быстрая сортировка" виснет... из ниоткуда параметр І приобретает заоблачные значения. Ошибку найти никак немогу...

program quicksort;
var
F2:text;
I:integer;
M1:array[1..10] of integer;
procedure Sort(A,B:integer);
var I,J,X,P:integer;
begin
Repeat
I:=A; J:=B;
X:=M1[(B+1)div 2];
if M1[I]<X then inc(I); {Вот здесь І приобретает нереальные значения}
if M1[J]>X then dec(J);
If I<=J then begin
P:=M1[I];
M1[I]:=M1[J];
M1[J]:=P;
inc(I); dec(J);
end;
Until I>J;

If A<J then Sort(A,J);
If I<B then Sort(I,B);
end;
begin
Assign(F2,'Sort.sol');
rewrite(F2);
randomize;
For I:=1 to 10 do
M1[I]:=random(100);
Sort(1,10);
For I:=1 to 10 do write(F2,M1[I]);
close(F2);
end.


Выполнял на TDE и Borland Pascal
Помогите разобратся rolleyes.gif

Сообщение отредактировано: RathaR -


--------------------
Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик!
Я - системный аналитик!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






1)
Цитата
  if M1[I]<X then inc(I);
if M1[J]>X then dec(J);
- это неправильно, там должно быть не однократное увеличение/уменьшение индекса, а увеличение/уменьшение "до тех пор, пока"...
2)
Цитата
X:=M1[(B+1)div 2];
это тоже неправильно... Откуда взялась 1-ца?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: Иван

Репутация: -  7  +


Цитата(volvo @ 5.07.2009 12:49) *

1) - это неправильно, там должно быть не однократное увеличение/уменьшение индекса, а увеличение/уменьшение "до тех пор, пока"...
2)это тоже неправильно... Откуда взялась 1-ца?


1) эм... да, тут промах, но условный оператор появился от отчаяния, сначала были

While M1[I] < X Do Inc(i);
While M1[J] > x Do Dec(j);


и результат тотже
2) насколько я понял ведь всерамно откуда брать елемент X главное чтоб не первый и не последний... и единица в принципе там мешать не должна хотя возможно особого смысла в ней нет.

Сообщение отредактировано: RathaR -


--------------------
Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик!
Я - системный аналитик!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Там должна быть НЕ единица...
 X:=M1[(A+B)div 2];
отрабатывает прекрасно...
Цитата
главное чтоб не первый и не последний
Вот именно... А у тебя это какой будет, скажем, после 5-ой итерации? Даже не то что первым, а ПЕРЕД первым. Ситуация: A = 7, B = 10... Что будет в твоем случае?

Добавлено через 2 мин.
P.S. Ты при выводе данных в файл их хоть пробелами разделяй, а то потом не разберешь, что где...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: Иван

Репутация: -  7  +


Цитата(volvo @ 5.07.2009 13:07) *

Там должна быть НЕ единица...
 X:=M1[(A+B)div 2];
отрабатывает прекрасно...
Вот именно... А у тебя это какой будет, скажем, после 5-ой итерации? Даже не то что первым, а ПЕРЕД первым. Ситуация: A = 7, B = 10... Что будет в твоем случае?

так как у меня, будет только на первых проходах работать, а когда пойдет по рекурсии.... вот блин, всё проще чем казалось smile.gif
Спасиба большое, ато час сидел розобратся не мог rolleyes.gif


--------------------
Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик!
Я - системный аналитик!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 9:34
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name