Сортировка пузырьком

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Сортировка пузырьком

Сообщение ifrost » 17.11.2009 13:18:41

Добрый день!
Извините меня, в институте задали практическую написать по способам сортировки.
Мне достался "пузырьковый" метод. В программировании я ноль. :(
У меня есть массив чисел, к примеру,: 8, 6, 0, 6, 3, 3, 0, 6
Процедуру сортировки содрал из Википедии // _http://ru.wikipedia.org/wiki/Сортировка_пузырьком
Код: Выделить всё
  Flag := true;
  while Flag do
  begin
    Flag := false;
    for i := 0 to ElementCnt - 1 do
    begin
      if TempArray[i] > TempArray[i + 1] then
      begin
        TempInt := TempArray[i];
        TempArray[i] := TempArray[i + 1];
        TempArray[i + 1] := TempInt;
        Flag := true;
      end;
    end;
  end;

После сортировки:
Код: Выделить всё
исходный 8, 6, 0, 6, 3, 3, 0, 6
выходной 0, 0, 0, 3, 3, 6, 6, 6

Если ещё раз нажать на кнопку, по которой вызывается процедура сортировки,
то всё встанет на свои места:
Код: Выделить всё
исходный 8, 6, 0, 6, 3, 3, 0, 6
выходной 0, 0, 3, 3, 6, 6, 6, 8

Причём такое бывает не всегда, иногда сразу нормально сортирует,
а нажмёшь ещё раз на кнопку сортировки - опять 0 впереди добавляется,
ещё раз нажмёшь - всё в порядке и все последующие нажатия всё хорошо.

Может я с псевдокода неправильно чего перевёл? Не знаю...
Помогите пожалуйста :roll:
ifrost
новенький
 
Сообщения: 21
Зарегистрирован: 13.11.2009 09:19:51

Re: Сортировка пузырьком

Сообщение Mr.Smart » 17.11.2009 13:41:03

Простейший вид сортировки :wink:
Код: Выделить всё
var
  j,i: Integer;
begin
   for j:=0 to ElementCnt-1 do
    for i:=1 to ElementCnt-1 do
      if TempArray[j]>TempArray[i] then
       begin
        TempInt:=TempArray[j];
        TempArray[j]:=TempArray[i];
        TempArray[i]:=TempInt;
       end;
end;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Сортировка пузырьком

Сообщение Sergei I. Gorelkin » 17.11.2009 13:52:56

Динамический массив из n элементов имеет диапазон от 0 до (n-1). Поэтому, делая внутренний цикл от 0 до ElementCnt-1 и обращаясь к элементу с индексом i+1, будем вылезать за границу массива. Внутренний цикл должен быть от 0 до ElementCnt-2.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Сортировка пузырьком

Сообщение ifrost » 17.11.2009 15:57:35

Sergei I. Gorelkin писал(а):Динамический массив из n элементов имеет диапазон от 0 до (n-1). Поэтому, делая внутренний цикл от 0 до ElementCnt-1 и обращаясь к элементу с индексом i+1, будем вылезать за границу массива. Внутренний цикл должен быть от 0 до ElementCnt-2.

Спасибо большое!
ifrost
новенький
 
Сообщения: 21
Зарегистрирован: 13.11.2009 09:19:51


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

Рейтинг@Mail.ru