Сортировка представляет собой процесс упорядочения элементов в массиве в порядке возрастания или убывания их значений. Например, массив X из n элементов будет отсортирован в порядке возрастания значений его элементов, если:
x[1]<x[2]<…<x[n]
и в порядке убывания, если:
x[1]>x[2]>…>x[n]
Алгоритм сортировки методом пузырька.
Сравнить первый элемент массива со вторым. Если, первый окажется больше второго, то поменять их местами. Повторить для второго и третьего, третьего и четвертого, i-го и (i+l)-гo, (n-l)-гo и n-го элементов. В результате этих действий самый большой элемент станет на последнее (n)-е место. Повторить данный алгоритм, но последний (n)-й элемент не рассматривать, так как он уже занял свое место. После проведения данной операции самый большой элемент оставшегося массива станет на (n-l)-e место. Повторять до тех пор, пока весь массив не упорядочится по возрастанию.
for j=1:N-1 for i=1:N-j if x(i) > x(i+1) b=x(i); x(i)=x(i+1); x(i+1)=b; end; end; end; | |
Рис. 4 Алгоритм сортировки массива методом пузырька |
Удаление элемента из массива
Необходимо удалить из массива х, состоящего из n элементов, m-й по номеру элемент. Для этого достаточно записать элемент (m+1) на место элемента m, (m+2) – на место (m+l) и т.д., n-на место (n-1) и при дальнейшей работе с этим массивом использовать элемент n-1.
В MatLab есть встроенные функции нахождения суммы (sum), произведения (prod) элементов массива (матрицы), поиска максимума (max) и минимума(min), сортировки (sort).
Индивидуальные задания:
По предложенным алгоритмам разработать блок-схемы и написать листинг.
Вариант 1
Найти наименьшее простое число в массиве x(n). Если тахих чисел несколько определить их количество.
|
Алгоритм
- Ввести размер массива N.
- Создать цикл для элементов массива.
- Ввести переменную pr, которая является флагом, т.е. показателем наличия простых чисел в массиве (пока в массиве не обнаружено простых чисел pr=0, если простые числа есть pr=1).
- Осуществить проверку на то, является ли данный элемент массива простым числом (при этом в листинг вводится переменная L, которая используется при этой проверке: L=1, пока не встретились делители числа, L станет равной 0, если встретятся делители числа).
- Создать цикл по j от 2 до x(i)/2 для проверки является ли число простым (поиск возможных делителей числа).
- Если x(i) делится на j, то встретился делитель числа, x(i) не является простым, в L записывается 0 и происходит выход из цикла по j с помощью оператора break.
- Осуществить проверку значения переменной L, если L=1, то число x(i) простое. Если число x(i) простое и при этом pr=0, то встретилось первое простое число, и его значение записывается в переменную min, т.е. делается предположение, что x(i) является минимальным простым; количество минимумов k равно 1.
- Записать в pr 1, так как в массиве есть простые числа.
- Иначе, если pr=1, т.е. встретилось очередное простое число, сравнить x(i) с min.
- Если x(i)<min, этот элемент x(i) записать в переменную min, количество минимумов при этом =1.
- Иначе, если очередной элемент x(i) равен min, то количество минимумов увеличивается.
- Если после перебора всех элементов массива, переменная pr осталась равной 0, то вывести сообщение «Простых чисел нет».
- Если простые числа встретились в массиве, вывести минимальное простое число min и количество минимальных простых чисел k.
Вариант 2
|
В квадратной матрице A(N,N) необходимо обнулить столбцы, в которых элемент на побочной диагонали является максимальным.
Алгоритм
В каждом столбце найти max элемент и проверить: если наибольший элемент расположен на побочной диагонали – обнулить все элементы в соответствующем столбце. Элемент находится на побочной диагонали, если его номера строки i и столбца j связаны соотношением i+j=n+1.
- Ввести размер квадратной матрицы N.
- Создать цикл по всем столбцам матрицы, в каждом из которых осуществить поиск максимального элемента и его номера.
- Предположить, что первый элемент в столбце A(1,j) и является максимальным.
- Ввести в листинг переменную nmax, в которой будет храниться номер максимального элемента j-го столбца. Записать в переменную nmax 1.
- В цикле по i перебрать все элементы j-го столбца.
- Если очередной элемент больше max, то в переменную max записать этот элемент, а в переменную nmax – номер строки, где находится элемент.
- Если в текущем столбце максимальный элемент находится на побочной диагонали, то обнулить все элементы в этом столбце.