Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4_4 Сортировки.doc
Скачиваний:
42
Добавлен:
09.02.2015
Размер:
133.12 Кб
Скачать

Методы сортировки массивов

Методы сортировки массивов

Для сортировки (упорядочения) по возрастанию или убыванию значений в массиве разработано множество методов [Вирт, Кнут. т 3].Рассмотрим три из них, считая, для определённости, что первые n, n=6, элементов массива Х

Х1

Х2

Х3

Х4

Х5

Х6

34

21

15

18

25

40

требуется упорядочить по возрастанию, не используя дополнительных массивов.

Метод включения с сохранением упорядоченности (метод прямого включения или сортировка вставками).

Сортировка начинается со сравнения чисел в первой (Х1) и второй (Х2)ячейках массива. Если окажется, что Х1> Х2, то их значения меняют местами.

Х1

Х2

Х3

Х4

Х5

Х6

21

34

15

18

25

40

На каждом следующем i-том шаге, i=2, 3,…,n-1, значение из (i+1)-ой ячейки массива путем обмена положением с числом из предыдущей ячейки продвигают в сторону уменьшения индекса ячейки до тех пор, пока ни окажется, что в предыдущей ячейке находится меньшее число.

Из сказанного следует, что при реализации метода прямого включения внешний цикл должен выполняться n-1 раз, а максимально возможное число выполнений внутреннего цикла, в теле которого должны выполняться сравнения и перестановки чисел, будет увеличиваться от 1 до n-1. Однако внутренний цикл следует организовать так, чтобы он заканчивался или вообще не выполнялся при наступлении условия: значение в предыдущей ячейке массива меньше, чем в текущей.

В нашем примере:

- при i=2 число 15 из ячейки Х3 последовательно обменяется местами с числом 34 из ячейки Х2, а затем с числом 21 из ячейки Х1,

Х1

Х2

Х3

Х4

Х5

Х6

15

21

34

18

25

40

- при i=3 число 18 из ячейки Х4 последовательно обменяется местами с числом 34 из ячейки Х3, а затем с числом 21 из ячейкиХ2,

Х1

Х2

Х3

Х4

Х5

Х6

15

18

21

34

25

40

- при i=4 число 25 из ячейки Х5 обменяется местами с числом 34 из ячейки Х3,

Х1

Х2

Х3

Х4

Х5

Х6

15

18

21

25

34

40

- при i=5 число 40 из ячейки Х6 не изменит своего положения, так как больше числа в ячейке Х5,

Х1

Х2

Х3

Х4

Х5

Х6

15

18

21

25

34

40

Ниже представлен фрагмент программы упорядочения по возрастанию первых n элементов массива X методом прямого включения (включения с сохранением упорядоченности) .

  1. for i:=1 to n-1 do

  2. begin

  3. j:=i;

  4. while (X[j+1]<X[j]) and (j>0) do

  5. begin

  6. R:=X[j];

  7. X[j]:=X[j+1];

  8. X[j+1]:=R;

  9. j:=j-1;

  10. end;

end;

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

Метод прямого обмена (метод пузырька).

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

На первом шаге последовательно, для j = n, n-1, …,2, сравниваются значения соседних ячеек массива, и при выполнении условия Хjj-1выполняется их перестановка, в результате чего наименьшее число оказывается в ячейке Х1.

В нашем примере после выполнения первого шага данные в массиве расположатся так:

Х1

Х2

Х3

Х4

Х5

Х6

15

34

21

18

25

40

На втором шаге процесс повторяется, но только для j = n, n-1, …,3

Х1

Х2

Х3

Х4

Х5

Х6

15

18

34

21

25

40

На каждом следующем шаге число проверяемых пар ячеек будет уменьшаться на 1. В общем случае, на любом шаге i, i=1, 2, 3, …, n-1, процесс будет выполняться для j от n до i+1, в частности, при i= n-1 – только один раз для n-ой и (n-1)-вой ячеек.

Из сказанного следует, что при реализации метода прямого обмена внешний цикл должен выполняться n-1раз, а число выполнений внутреннего цикла, в теле которого должны выполняться сравнения и перестановки чисел, будет уменьшаться от n-1 до 1.

Происхождение термина “метод пузырька” объясняется так: если представить вертикальное расположение ячеек массива с ростом индекса сверху вниз, то самое маленькое число из рассматриваемых будет подниматься вверх подобно пузырьку в воде.

В нашем примере

- при i=3 перестановки приведут к следующему состоянию массива

Х1

Х2

Х3

Х4

Х5

Х6

15

18

21

34

25

40

- при i=4

Х1

Х2

Х3

Х4

Х5

Х6

15

18

21

25

34

40

- при i=5

Х1

Х2

Х3

Х4

Х5

Х6

15

18

21

25

34

40

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

Модифицированный метод прямого обмена (модифицированный метод пузырька).

Как видно из приведенного выше числового примера массив оказался упорядоченным уже после четвёртого шага, то есть возможновыполнение внешнего цикла не n-1 раз, а меньше, когда станет известно, что массив уже упорядочен. Такая проверка основывается на следующем: если при выполнении внутреннего цикла не было ни одной перестановки, значит массив уже упорядочен и можно выйти из внешнего цикла. В качестве признака, выполнялась ли перестановка, используют переменную булевского типа: до входа во внутренний цикл ей дают одно значение, например, False, а при выполнении перестановки – другое, например, True.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]