Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Леднева_программирование_на_JAVA.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
11.44 Mб
Скачать

Содержание отчета

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

  • титульный лист;

  • задание;

  • словесное описание алгоритма;

  • схему алгоритма;

  • текст программы на языке Java.

Контрольные вопросы

1. Какие циклы называются итерационными и чем они отличаются от циклов со счетчиком?

2. Привести общую форму записи цикла while и пример программного кода.

3. Привести общую форму записи цикла do-while и пример программного кода.

4. Чем отличается цикл с предусловием от цикла с постусловием?

5. Что такое массив?

6. Что подразумевается под размерностью массивов и каковы особенности задания индексов массивов в Java?

7. Как выполняется объявление и выделение памяти (инициализация) для одномерного массива?

8. Какие алгоритмы используются при обработке одномерных массивов и какое основное правило нужно выполнять для таких задач?

9. Как осуществляется ввод и вывод одномерных массивов?

10. Какие алгоритмы используются для вычисления сумм и количеств элементов массивов?

11. Приведите классический алгоритм нахождения максимума и минимума в одномерном массиве.

12. Как найти номер минимального и максимального элементов массива?

13. Как выполняется поиск максимума и минимума среди элементов, имеющих заданное свойство?

Лабораторная работа № 6 алгоритмы сортировки и разбиения одномерных массивов

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

Источники: [3, с. 160], [4, с. 121-124].

Краткая теория Сортировка одномерных массивов

Сортировка – это расположение чисел в порядке возрастания или убывания.

Наиболее распространенный и простой метод сортировки – метод «пузырька». Он требует минимального объема памяти для данных, но затраты времени на этот метод велики. Суть метода «пузырька» заключается в следующем.

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

1) числа сравниваются попарно: первое со вторым; второе с третьим; i-тое – с (i+1)-м;

2) если меньшее стоит в паре на втором месте, то числа меняются местами.

За один такой просмотр массива минимальное число «выталкивается», по крайней мере, на одно место вверх (вперед), а максимальное – перемещается в самый конец (вниз). То есть минимальное число как легкий пузырек воздуха в жидкости постепенно «всплывает» в начало последовательности. Отсюда – название метода. За (n – 1) просмотр произойдет полное упорядочение массива при любом исходном расположении чисел в нем. Рассмотрим работу метода на примере сортировки массива по возрастанию, приведенном на рис. 6.1.

Алгоритм сортировки 1:

1. Ввести массив из n чисел.

2. Для номера просмотра k = 0 до k < x.length –1.

2.1. Для номера числа i = 0 до i < x.length –2.

Если число[i] > число[i+1], то поменять их местами.

3. Вывести отсортированный массив.

4. Закончить.

19

13

5

31

1

26

7

– исходный массив

13

19

5

19

перестановки в первом просмотре

1

31

26

31

7

31

13

5

19

1

26

7

31

– после первого просмотра

5

13

1

19

7

26

5

13

1

19

7

26

31

– после второго просмотра

1

13

перестановки в третьем просмотре

7

19

5

1

13

7

19

26

31

– после третьего просмотра

1

5

перестановки в четвертом просмотре

7

13

1

5

7

13

19

26

31

– после четвертого просмотра

В пятом просмотре перестановок нет. Сортировка окончена.

1

5

7

13

19

26

31

– отсортированный массив

Рис. 6.1

Глубину просмотра можно уменьшать, основываясь на том, что большие числа «опускаются» вниз (в конец последовательности) и затем не переставляются. Во внутреннем цикле for конечное значение параметра цикла i уменьшается на номер просмотра k:

for (int k = 0; k< x.length – 1; k++) // номер просмотра

for (int i = 0; i < x.length k; i++) // 

if (x[i]>x[i+1]){…}

Сокращение количества просмотров дает лучшие временные характеристики метода. Из алгоритма можно понять, что если на одном из просмотров не было перестановок, то их не будет и потом – данные уже отсортированы, процесс сортировки можно закончить. Такой подход дает значительную экономию времени при работе с большими, «почти отсортированными» массивами.

В алгоритме используется переменная «перестановка_есть», которой сначала присваивается значение «истина», а как только в одном из просмотров не будет перестановок – ей присваивается значение «ложь». Это позволяет прервать выполнение цикла while.

Алгоритм сортировки 2:

1. Ввести массив x из n элементов.

2. Признак перестановка_есть = истина.

3. Номер просмотра к=0.

4. Пока перестановка_есть = истина, выполнять.

4.1. количество_перестановок =0.

4.2. Для i от 0 до i< x.length –k – 1

Если x[i] > x[i+1], то

4.2.1. поменять x[i] и x[i+1]

4.2.2. количество_перестановок++

4.3. Если количество_перестановок=0,

признак перестановка_есть=ложь .

4.4. k++

5. Вывести массив x.

6. Закончить.