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

Задача: 

При работе с массивами данных не редко возникает задача их сортировки по возрастанию или убыванию, т.е. упорядочивания. Это значит, что элементы того же нужно расположить строго по порядку. Например, в случае сортировки по возрастанию предшествующий элемент должен быть меньше последующего (или равен ему).

Алгоритм решения задачи: 

Существует множество методов сортировки. Одни из них являются более эффективными, другие – проще для понимания. Достаточно простой для понимания является сортировка методом пузырька, который также называют методом простого обмена. В чем же он заключается, и почему у него такое странное название: "метод пузырька"?

Как известно воздух легче воды, поэтому пузырьки воздуха всплывают. Это просто аналогия. В сортировке методом пузырька по возрастанию более легкие (с меньшим значением) элементы постепенно "всплывают" в начало массива, а более тяжелые друг за другом опускаются на дно (в конец массива).

Алгоритм и особенности этой сортировки таковы:

  1. При первом проходе по массиву элементы попарно сравниваются между собой: первый со вторым, затем второй с третьим, следом третий с четвертым и т.д. Если предшествующий элемент оказывается больше последующего, то их меняют местами.
  2. Не трудно догадаться, что постепенно самое большое число оказывается последним. Остальная часть массива остается не отсортированной, хотя некоторое перемещение элементов с меньшим значением в начало массива наблюдается.
  3. При втором проходе незачем сравнивать последний элемент с предпоследним. Последний элемент уже стоит на своем месте. Значит, число сравнений будет на одно меньше.
  4. На третьем проходе уже не надо сравнивать предпоследний и третий элемент с конца. Поэтому число сравнений будет на два меньше, чем при первом проходе.
  5. В конце концов, при проходе по массиву, когда остаются только два элемента, которые надо сравнить, выполняется только одно сравнение.
  6. После этого первый элемент не с чем сравнивать, и, следовательно, последний проход по массиву не нужен. Другими словами, количество проходов по массиву равно m-1, где m – это количество элементов массива.
  7. Количество сравнений в каждом проходе равно m-i, где i – это номер прохода по массиву (первый, второй, третий и т.д.).
  8. При обмене элементов массива обычно используется "буферная" (третья) переменная, куда временно помещается значение одного из элементов.
Программа на языке Паскаль: 

const
    m = 10;
 
var
    arr: array[1..m] of integer;
    i, j, k: integer;
 
begin
    randomize;
 
    write ('Исходный массив: ');
    for i := 1 to m do begin
        arr[i] := random(256);
        write (arr[i]:4);
    end;
    writeln; writeln;
 
 
    for i := 1 to m-1 do
        for j := 1 to m-i do
            if arr[j] > arr[j+1] then begin
                k := arr[j];
                arr[j] := arr[j+1];
                arr[j+1] := k
            end;
 
    write ('Отсортированный массив: ');
    for i := 1 to m do
        write (arr[i]:4);
 
    writeln;
 
readln
end.

Комментарии

свои значения

В программе написано "Рандом", т.е. выбираются любые числа до 256, а как сделать чтобы можно было ввести свои значения, и они отсортировались??

Вместо for i := 1 to m do

Вместо

for i := 1 to m do begin
        arr[i] := random(256);

нужно

for i := 1 to m do 
        readln(arr[i] );

а как сделать так чтобы в

а как сделать так чтобы в конце он выводил не значения упорядоченного массива, а число i например:
исходный массив:
i=1 203
i=2 75
i=3 109
отсортированый массив: 1 3 2

что такое j??

в двумерном массиве понятно, что такое i и j
а в одномерном в данном случае что такое j??

В данном случае i - это

В данном случае i - это количество переборов массива (проходов по массиву) начиная с начала, а j как раз и играет роль индекса очередного элемента. Вообще не суть какое у переменной будет имя, оно может быть любым.

Что такое М?

Что такое М?

Это последний индекс в

Это последний индекс в массиве, он равен в задаче 10

просто константа, ну просто

просто константа, ну просто число взяли и присвоили m

М количество элементов

М количество элементов заданных как константа.

j:=0 а не J:=1

j:=0 а не J:=1 иначе первый элемент всегда на месте

Индексация массива начинается

Индексация массива начинается с единицы. Нулевого элемента вообще нет.

А как сделать сортировку

А как сделать сортировку динамических переменных???

string

подскажите пожалуйста,как отсортировать строковый массив по алфавиту????

arr[j+1] := k Добавьте точку

arr[j+1] := k
Добавьте точку с запятой в конце.

Тут все правильно

Ты заметь, что это выражение стоит перед end, так что точка с запятой перед end необязательна! Читай матчасть!

Выбранные значения

В программе написано "Рандом", т.е. выбираются любые числа до 256, а как сделаь чтобы можно было ввести свои значения, и они отсортировались??

Array

Делаеш массив не от 1 до m а например до 10 ;
и потом arr[i]:={0,1,2,3,4,5,6,7,8,9};