Страница 1 из 1

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

СообщениеДобавлено: 17.11.2009 13:18:41
ifrost
Добрый день!
Извините меня, в институте задали практическую написать по способам сортировки.
Мне достался "пузырьковый" метод. В программировании я ноль. :(
У меня есть массив чисел, к примеру,: 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:

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

СообщениеДобавлено: 17.11.2009 13:41:03
Mr.Smart
Простейший вид сортировки :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;

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

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

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

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

Спасибо большое!