71ac2c945726bb81ee226e6482709016.ppt
- Количество слайдов: 47
78 6 82 67 55 44 34 Одномерные и двумерные массивы. 1 4 7 2 -5 0 8 9 3 6 15 10 11 12 20
Одномерный массив объединяет под одним именем фиксированное количество элементов одного типа данных. Каждый элемент массива имеет собственный номер. Описание массива определяет имя, размер массива и тип элементов. Var X: array[1. . 7] of integer; Y: array [1. . 10] of real; 1 2 3 78 6 82 4 5 6 7 67 55 44 34 X[1]=78, X[2]=6, X[3]=82, X[4]=67, X[5]=55, X[6]=44, X[7]=34
Задание с клавиатуры For i: =1 to 10 do Begin Write ('A[', i, ']='); Readln(A[i]); End; Задание типизированной константой Const A: array [1. . 5] of integer = (5, 6, 2, 0, -4); С помощью генератора случайных чисел For i: =1 to 20 do A[i]: = random(50); Задание с помощью формулы For i: =1 to 20 do A[i]: = i; Чтение данных из файла assign(input, 'input. txt'); assign(output, 'output. txt'); reset(input); rewrite(output); … … … … close(input); close(output);
Двумерный массив (матрица, таблица) объединяет под одним именем фиксированное количество элементов одного типа данных. Каждый элемент в двумерном массиве определяется номером строки и номером столбца, на пересечении которых он находится. Описание массива определяет имя, размер массива и тип элементов. Var A: array [1. . 5, 1. . 5] of integer; B: array [1. . 10, 1. . 10] of real; a 11 a 12 a 13 a 14 a 15 1 4 7 a 21 a 22 a 23 a 24 a 25 2 -5 0 a 31 a 32 a 33 a 34 a 35 8 9 3 6 15 10 11 12 20 A[1, 1]=1, A[1, 2]=4, … A[2, 2]=-5, … A[3, 2]=9, … A[3, 5]=20
Задание массива с клавиатуры For i: =1 to n do For j: =1 to m do Begin Write (‘A[‘, i, ’, ’, j, ’]=‘); Readln (A[i, j]); End; Задание типизированной константой Const A: array[1. . 2, 1. . 2] of integer=((5, 6), (2, 0)); Задание с помощью генератора случ-х чисел For i: =1 to n do For j: =1 to m do A[i, j]: = random(50); Формирование массива с помощью формулы For i: =1 to n do For j: =1 to m do A[i]: = i; Чтение данных из файла input. txt и запись в файл output. txt assign (input, 'input. txt'); assign (output, 'output. txt'); reset (input); rewrite (output); … … … … close (input); close (output); Вывод двумерного массива For i: =1 to n do begin Writeln; For j: =1 to m do Write (A[i, j]: 2, ' '); end;
Найти сумму и произведение элементов массива, состоящего из 10 элементов Program massiv; Const A: array [1. . 10] of integer = (1, 0, -1, 0, 6, 2, 0, 4, 8, -7); Var i, s: integer; p: longint; BEGIN s: =0; p: =1; For i: =1 to 10 do begin s: =s + A[i]; p: =p*A[i]; end; Writeln (‘Сумма элементов =‘, s); Writeln (‘Произведение элементов =‘, p); END. Размерность массива n=10 Исходный массив Результат Сумма элементов = 13 1 0 -1 0 6 2 0 4 8 -7 Произведение элементов =2688
Найти сумму всех отрицательных элементов массива, состоящего из 10 элементов Program massiv; Const A: array [1. . 10] of integer = (1, 0, -1, 0, 6, 2, 0, 9, 8, -7); Var i, s: integer; BEGIN s: =0; For i: =1 to 10 do if A[i]<0 then s: =s + A[i]; If s=0 then Writeln (‘отрицательных элементов нет‘) else Writeln (‘Сумма отр-х элементов =‘, s); END. Размерность массива Исходный массив n=10 1 0 -1 0 6 2 0 9 8 -7 Результат Сумма отр-х элементов = -8
В двумерном массиве, элементами которого являются целые числа, подсчитать сумму элементов с k 1 строки по k 2. Program d 2; Var A: array[1. . 10, 1. . 10] of integer; i, j, k 1, k 2, s, m, n : integer; Begin Writeln (‘Введите размерность массива'); Readln (n, m); {Ввод массива} S: =0; Writeln (k 1, k 2); Read. Ln (k 1, k 2); If (k 1>k 2) or (k 2>n) then Writeln ('ошибка') else Begin For i: =k 1 to k 2 do For j: =1 to m do S: =S+A[i, j]; Write ('S=', S); End. Пусть n=4, m=4 k 1=2, k 2=3 Исходный массив 5 4 3 1 8 7 8 9 0 3 3 8 Результат S=32 1 1 3 4
В матрице A размерностью 4*4 найти сумму ее положительных элементов, произведение элементов, значения которых попадают в интервал [2, 5], а также отношение этих двух величин. Program massiv; Var A: array [1. . 4, 1. . 4] of integer; i, j, s: integer; BEGIN {Ввод массива} s: =0; p: =1; For i: =1 to 4 do For j: =1 to 4 do begin If A[i, j]>0 then s: =s+A[i, j]; If (A[i, j]>=2) and (A[i, j]<=5) then p: =p*A[i, j]; end; Writeln ('Сумма=', s: 6: 2); Writeln ('Произведение=', p: 6: 2); If p=0 then Writeln ('Отношение вычислить нельзя') else Writeln ('Отношение=', s/p: 6: 3) END. 4 x 4 Исходный массив 5 4 0 1 -8 -7 -8 -9 0 3 3 2 1 1 0 0 Результат Сумма=20 Произведение=360 Отношение=0. 055
Задача. Найти скалярное произведение двух массивов. Скалярным произведением двух массивов одинаковой размерности называется сумма произведений соответствующих элементов (a[1]*b[1] +a[2]*b[2]+. . . + a[n]*b[n]). Program mm; Var A, B: array[1. . 5] of integer; n, I, s: integer; BEGIN S: =0; For i: =1 to n do Begin Write ('A[', i, ']='); Readln (A[i]); End; For i: =1 to n do Begin Write (‘B[', i, ']='); Readln(B[i]); End; For i: =1 to n do S: = S+A[i]*B[i]; Writeln(‘вывод результата'); Write. Ln (S); END. Исходный массив A: 5 2 3 5 4 B: 1 5 5 4 0 Результат: 50
В одномерном массиве, элементами которого являются целые числа, подсчитать сумму элементов, кратных 9. Начало ввод n, А[1. . n ] s: =0 i: =1, n нет A[i] mod 9=0 да s: =s+A[i] Program mass 2; Var A: array[1. . 100] of integer; n, i, S: integer; Begin s: =0; Write ('число элементов массива ='); Readln (n); Randomize; For i: =1 to 20 do begin A[i]: = random(50); Write (A[i]: 4); end; For i: =1 to n do If A[i] mod 9=0 then s: =s+A[i]; Writeln ('s=', s); End. s Размерность массива Исходный массив Результат Конец n=8 0 9 18 7 -6 5 -4 9 s=36
Дан целочисленный массив из 18 элементов. Элементы могут принимать значения от 0 до 100 – баллы, полученные на ЕГЭ. Составьте программу, которая подсчитывает и выводит средний балл учащихся, сдавших экзамен (получивших оценку более 20 баллов). Гарантируется, что хотя бы один ученик в классе успешно сдал экзамен. Исходный массив 10 50 50 68 74 26 32 2 5 50 100 12 13 20 21 29 45 55 Program Srball; Const N = 20; Var A: array[1. . N] of integer; i, x, y: integer; S: real; Begin {Ввод массива} x: =0; y: =0; For i: = 1 to N do If A[i]>20 then begin x: = x+1; y: = y+A[i]; end; S: = y/x; Writeln('Sredniy ball=', S: 4: 1); End. Размерность массива N=18 Результат Sredniy ball=50. 0
В двумерном массиве, элементами которого являются целые числа, подсчитать среднее арифметическое четных элементов массива. Program mass 2; Var A: array [1. . 10 , 1. . 10] of integer; i, j, s, n, m, k: integer; sr: real; BEGIN S: =0; k: =0; Writeln (‘введите размерность массива'); Readln (n, m); {Ввод массива} For i: =1 to n do For j: =1 to m do If A[i, j] mod 2=0 then Begin S: =S+A[i, j]; k: =k+1; End; Sr: =s/k; Writeln(‘Сред. ариф. чёт. эл. =', sr: 4: 1); END. Пусть размерность массива 5 x 5 Исходный массив 51 22 34 58 91 13 6 19 34 26 20 15 25 33 85 56 3 44 35 16 65 27 85 15 34 Результат Сред. ариф. чёт. эл. =31. 8
В данном одномерном массиве, элементами которого являются целые числа, подсчитать среднее арифметическое отрицательных элементов. Исходный массив -10 57 51 68 74 -27 31 2 5 50 100 12 13 -23 21 29 45 55 10 10 Program A 1; Var A: array[1. . 100] of integer; k, n, i: integer; s: real; Begin Write ('число элементов массива ='); Readln (n); k: =0; s: =0; For i: =1 to n do Begin Write ('A[', i, ']='); Readln (A[i]); If A[i]<0 then Begin k: =k+1; s: =s+A[i]; End; If k=0 then writeln ('отрицательных элементов нет') else Begin s: =s/k; Writeln ('s=', s: 8: 1); End. Пусть размерность массива N=20 Результат -20. 0
В данном одномерном массиве, элементами которого являются целые числа, подсчитать среднее арифметическое элементов, попадающих в интервал [1, 25]. Количество элементов массива ввести с клавиатуры. Исходный массив 10 57 51 68 74 27 31 5 5 50 100 12 13 23 22 9 45 55 10 10 Program A 2; Var A: array[1. . 100] of integer; k, n, i: integer; s: real; Begin Write ('число элементов массива ='); Readln (n); k: =0; s: =0; For i: =1 to n do Begin Write ('A[', i, ']='); Readln(a[i]); If (A[i]>=1) and (A[i]<=25) then Begin k: =k+1; s: =s+A[i]; End; If k=0 then Writeln ('элементов нет') else Begin s: =s/k; Writeln ('s=', s: 6: 1); End. Пусть размерность массива N=20 Результат 10. 0
У квадратной матрицы есть замечательные свойства: 1. Индексы элементов, лежащих на главной диагонали равны, т. е. i = j. 2. 2. Первый индекс всех элементов выше главной диагонали меньше второго, 3. т. е. i < j. 4. 3. Первый индекс всех элементов ниже главной диагонали больше второго, 5. т. е. i > j. a 11 i< a 22 i> j j a 33 a 44 ann i= j
Дана квадратная матрица, элементами которой являются вещественные числа. Подсчитать сумму элементов главной диагонали. Program diag 1; Var A: array [1. . 10, 1. . 10] of real; i, j, n: integer; s: real; BEGIN S: =0; Writeln (‘введите размерность массива'); Readln (n); {Ввод массива} For i: =1 to n do For j: =1 to n do If i=j then S: =S+A[i, j]; Writeln('S=', S: 4: 1); END. Пусть размерность массива n=4 Исходный массив 0. 5 -5. 4 -9. 3 7. 1 8 7 8 9 0 -3 3 8 Результат S=16. 9 9. 1 -2. 1 -8. 3 6. 4
1. Для элементов побочной диагонали сумма первого и второго индексов равна «нарощенному» на единицу порядку матрицы, т. е. i + j = n+1. 2. Для элементов, находящихся над побочной диагональю: i+j
Дана квадратная матрица, элементами которой являются вещественные числа. Подсчитать сумму элементов, находящихся выше побочной диагонали. Program diag 2; Var A: array [1. . 10, 1. . 10] of real; i, j, n: integer; s: real; BEGIN S: =0; Writeln (‘введите размерность массива'); Readln (n); {Ввод массива} For i: =1 to n do For j: =1 to n do If i+j
1. Для элементов над пересечением диагоналей должны одновременно выполняться два неравенства: i+j
Дана квадратная матрица, элементами которой являются целые числа. Подсчитать сумму элементов, находящихся над и под пересечением диагоналей. Program diag 3; Var A: array [1. . 10, 1. . 10] of integer; i, j, n, s: integer; BEGIN S: =0; Writeln (‘введите размерность массива'); Readln (n); Randomize; For i: =1 to n do begin Writeln; For j: =1 to n do begin A[i, j]: =random(10); Write (A[i, j]: 2, ' '); end; For i: =1 to n do For j: =1 to n do If (i+j
Задача. Найти в массиве максимальный элемент.
Найти наибольший элемент одномерного массива Program mass 2; Var A: array [1. . 100] of integer; i, max, n: integer; Begin Writeln (’введите число элементов массива ’); Readln (n); For i: =1 to n do begin Write (’A[’, i , ’]=’); Readln (A[i]); end; max: =A[1]; For i: =2 to n do if A[i]>max then max: =A[i]; Writeln (’ max =’, max); End. Пусть размерность массива n=5 Исходный массив 10 1 2 6 99 Результат max = 99
Дан двумерный массив, элементами которого являются целые числа. Найти значение максимального элемента массива. Program massiv; Var A: array [1. . 10, 1. . 10] of integer; i, j, max, n, m: integer; BEGIN Writeln (‘введите размерность массива'); Readln (n, m); {Ввод массива} max: =A[1, 1]; For i: =1 to 5 do For j: =1 to 5 do If A[i, j]>max then max: =A[i, j]; Writeln('max=', max); END. Пусть размерность массива 5 x 5 Исходный массив 51 22 34 58 91 13 90 19 34 24 14 15 25 34 85 56 3 45 35 16 64 27 85 18 34 Результат max=91
Найти наименьший элемент одномерного массива Program mass 2; Var A: array [1. . 100] of integer; i, min, n: integer; Begin Writeln (’введите число элементов массива ’); Readln (n); For i: =1 to n do begin Write (’A[’, i , ’]=’); Readln (A[i]); end; min: =A[1]; For i: =2 to n do if A[i]
В двумерном массиве, элементами которого являются целые числа, вычислить сумму максимальных элементов из каждой строки, если предполагается, что в каждой строке такой элемент единственный. Program MAX 1; Var A: array [1. . 10, 1. . 10] of integer; S, i, j, max, n, m: integer; BEGIN Writeln (‘введите размерность массива'); Readln (n, m); {Ввод массива} S: =0; For i: =1 to n do begin max: =A[i, 1]; For j: =1 to m do If A[i, j]>max then max: =A[i, j]; S: =S+max; end; Writeln('S=', S); END. Пусть размерность массива n=4, m=4 Исходный массив 0 8 0 9 -5 7 -3 -2 -9 -8 3 -8 7 9 8 6 Результат S=28
В двумерном массиве, элементами которого являются целые числа, подсчитать количество элементов равных минимальному. Program d 5; Var A: array [1. . 10, 1. . 10] of integer; n, m, i, j, k, min: integer; BEGIN Writeln ('Введите размерность массива'); Readln (n, m); {Ввод массива} k: =0; min: =A[1, 1]; For i: =1 to n do For j: =1 to m do If A[i, j]
Опишите алгоритм подсчета числа элементов, равных максимальному, в числовом массиве из 20 элементов. Исходный массив 10 50 50 68 74 26 32 2 5 50 100 12 13 20 21 29 45 55 100 Program maksi 2; Var A: array[1. . 20] of integer; k, i, max: integer; BEGIN Размерность массива N=20 {Ввод массива} k: =1; max: =A[1]; For i: =2 to 20 do Begin If A[i]=max then k: =k+1; If A[i]>max then begin max: =A[i]; k: =1; end; End; Writeln (k); END. Результат 3
Дан двумерный массив целых положительных чисел размером 5 на 5. Найти сумму элементов строки, в которой расположен элемент с максимальным значением. Вывести значение суммы на печать, если предполагается, что такой элемент единственный. Program mas 32; Const n: =5; Var A: array[1. . n, 1. . n] of integer; max, s, imax, i, j: integer; BEGIN {Ввод массива} max: =A[1, 1]; S: =0; imax: =1; For i: =1 to n do For j: =1 to n do If A[i, j]>max then begin max: =A[i, j]; imax: =i; end; For j: =1 to n do S: =S+A[imax, j]; Writeln ('S=', S); End. Размерность массива 5 х5 Исходный массив 5 4 3 1 6 8 7 8 9 4 0 3 3 8 1 1 1 3 4 5 Результат S=30 0 3 3 8 0
Опишите алгоритм подсчета максимального количества подряд идущих совпадающих элементов в целочисленном массиве длины 25. Исходный массив 10 50 8 8 50 6 41 40 2 50 7 5 5 5 29 45 55 3 2 2 2 3 Program sovpad; Var A: array[1. . 25] of integer; k, k 1, i: integer; BEGIN k 1: =1; k: =1; For i: =1 to 25 do begin Write ('A[', i, ']='); Readln (A[i]); end; For i: =2 to 25 do begin If a[i] = a[i-1] then k: =k+1 else k: =1; If k > k 1 then k 1: =k; end; Writeln (‘max кол-во совп. элем. =', k 1); END. Размерность массива N=25 Результат max кол-во совп. элем. =6
Найдите номер первого из двух последовательных элементов в целочисленном массиве из 25 элементов, сумма которых максимальна (если таких пар несколько, то можно выбрать любую из них). Исходный массив 10 50 8 8 50 6 41 40 2 50 7 5 5 5 29 45 55 3 2 2 2 3 Program mas; Сonst n=25; Var A: array[1. . n] of integer; i, i 1, s: integer; BEGIN For i: =1 to n do Readln (A[i]); i 1: =1; S: =A[1]+A[2]; For i: =2 to n-1 do If A[i]+A[i+1]> S then begin i 1: =i; s: =A[i]+A[i+1]; end; Writeln(i 1); End. Размерность массива N=25 Результат 19
Дан прямоугольный массив целых полож-х чисел 4 х5. Опишите алгоритм поиска строки с наименьшей суммой элементов. Вывести на печать номер строки и сумму ее элементов. Предполагается, что такая строка единственна. Program minsum; Const n=4 ; m=5; Var A: array [1. . n, 1. . m] of integer; min, sum, imin, i, j: integer; BEGIN {Ввод массива} Sum: =0; For j: =1 to m do sum: =sum+A[1, j]; Min: =sum; imin: =1; For i: =2 to n do Begin Sum: =0; For j: =1 to m do sum: =sum+A[i, j]; If sum
Дан одномерный массив. состоящий из 10 элементов. Составить программу определения количества элементов массива, значение которых меньше заданного действительного числа t. Program mas 3; n=10, t=5. 5 Var A: array [1. . 10] of real; i, k: integer; t: real; BEGIN Write ('Введите число t='); Исходный массив Readln (t); k: =0; For i: =1 to 10 do 1 0. 5 -1 0 6 2 0 9 8 -7 begin Write ('Введите значение элемента A(', i, ') = '); Readln (A[i]); Результат If A[i]
В данном одномерном массиве, состоящем из 8 элементов, заменить отрицательные элементы на противоположные по знаку. Элементами массива являются целые числа. Program mass 1; Var A: array [1. . 8] of integer; i: integer; Begin For i: =1 to 8 do Begin Write ('A[', i, ']='); Readln (A[i]); End; For i: =1 to 8 do if A[i]<0 then A[i]: =-A[i]; For i: =1 to 8 do write (A[i]: 5); End. Исходный массив Изменённый массив 0 9 -8 7 -6 5 -4 3 0 9 8 7 6 5 4 3 Начало ввод А[1. . 8] i: =1, 8 нет A[i]<0 да A[i]: =-A[i] вывод А[1. . 8] Конец
Найти и вывести на экран номера четных элементов в числовом массиве из 20 элементов. Исходный массив 10 57 51 68 74 27 31 2 5 50 100 12 13 21 21 29 45 55 100 Program d 3; Var A: array [1. . 20] of integer; i, n: integer; Begin For i: =1 to 20 do Begin Write ('A[', i, ']='); Readln (A[i]); End; For i: =1 to n do if A[i] mod 2 =0 then Write(i: 5); End. Размерность массива N=20 Результат 1 4 5 8 10 11 12 19 20
В данном одномерном массиве, состоящем из 8 элементов, заменить нулями все отрицательные элементы. Элементами массива являются целые числа. Program mass 1; Var A: array [1. . 8] of integer; i: integer; Begin For i: =1 to 8 do Begin Write ('A[', i, ']='); Readln (A[i]); End; For i: =1 to 8 do if A[i]<0 then A[i]: =0; For i: =1 to 8 do write (A[i]: 5); End. Исходный массив Изменённый массив 0 9 -8 7 -6 5 -4 3 0 9 0 7 0 5 0 3 Начало ввод А[1. . 8] i: =1, 8 нет A[i]< 0 да A[i]: =0 вывод А[1. . 8] Конец
Как переставить элементы? Задача. Поменять местами содержимое двух чашек. Нужна 3 -я чашка, чтобы в нее перелить содержимое первой.
В данном одномерном массиве, элементами которого являются целые числа, поменять местами первый минимальный и последний максимальный элементы. Число элементов массива запрашивается с клавиатуры. Program d 3; Var a: array[1. . 100] of integer; nmin, nmax, min, max, n, i: integer; Begin Write ('число элементов массива ='); Readln(n); For i: =1 to n do Begin Write ('A[', i, ']='); Readln(A[i]); End; min: =a[1]; nmin: =1; max: =a[1]; nmax: =1; Размерность массива n=5 Исходный массив 10 1 1 6 99 For i: =2 to n do If A[i]>=max then Begin max: =A[i]; nmax: =i; End; For i: =2 to n do If A[i]
Дана прямоугольная матрица, элементами которой являются целые числа. Для каждого столбца подсчитать среднее арифметическое его нечетных элементов и записать полученные данные в новый массив Program mmm 2; Var A: array[1. . 5, 1. . 5]of integer; B: array[1. . 5] of real; k, n, m, i , j: integer; s: real; BEGIN Writeln ('Введите размерность массива А'); Readln (n, m); {Ввод двумерного массива А} For j: =1 to m do begin s: =0; k: =0; B[j]: =0; For i: =1 to n do If A[i, j] mod 2<>0 then begin s: =s+A[i, j]; k: =k+1; end; If k<>0 then B[j]: =s/k ; end; For j: =1 to m do Write (B[j]: 5: 1, ’ ‘); END. Пусть размерность массива A : 5 x 5 Исходный массив A 51 22 13 0 20 15 56 3 50 44 34 58 11 34 35 43 0 1 32 22 0 26 85 0 11 Тогда размерность массива В: 5 Результат 32. 0 9. 0 23. 0 22. 0 48. 0
Дан двумерный массив А и одномерный массив B соответствующих размерностей. Нечетные строки массива А заменить элементами массива B. Program mmm 2; Var A: array[1. . 5, 1. . 5]of integer; B: array [1. . 5] of integer; n, m, i, j: integer; BEGIN Writeln ('Введите размерность массива А'); Readln (n, m); Writeln ('Введите элементы массива А'); {Ввод двумерного массива А} Writeln('Введите элементы массива В'); {Ввод одномерного массива В} For i: =1 to n do For j: =1 to m do If i mod 2<>0 then A[i, j]: =B[j]; Writeln (Вывод изменённого массива'); For i: =1 to n do begin For j: =1 to m do Write(A[i, j]: 5); Writeln; end; END. Пусть размерность массива A : 4 x 5 Исходный массив A 51 13 20 56 22 34 58 0 0 19 34 26 15 25 33 85 3 0 0 0 Тогда размерность массива В: 5 Исходный массив В 55 44 33 22 11 Результат 55 13 55 56 44 0 44 3 33 19 33 0 22 34 22 0 11 26 11 0
Дана прямоугольная матрица 5 на 5, элементами которой являются целые числа. Для каждого столбца подсчитать сумму элементов кратных 7 и полученные данные записать в новый массив. Program mm; Var A: array[1. . 5, 1. . 5] of integer; B: array[1. . 5] of integer; i, j, s: integer; BEGIN {Ввод двумерного массива А } For j: =1 to 5 do begin s: =0; B[j]: =0; For i: =1 to 5 do If A[i, j] mod 7=0 then s: =s+A[i, j]; B[j]: =s; end; Writeln(‘вывод результата'); For j: =1 to 5 do Write. Ln (’B[’, j , ’]=’, B[j]: 4); END. Размерность массива А 5 x 5 Исходный массив 51 22 34 58 49 13 90 19 34 21 14 15 25 34 80 56 3 35 35 16 64 25 85 14 34 Результат: массив В 70 0 35 49 70
Сортировка массива Сортировка – это расстановка элементов массива в заданном порядке (по возрастанию, убыванию, последней цифре, …). метод «пузырька» метод выбора «пузырек воздуха в стакане воды поднимается со дна вверх» найти миним. элемент и поставить на первое место
Метод пузырька 1 -ый проход 5 5 5 1 2 2 1 5 1 1 2 2 3 3 Идея – пузырек воздуха в стакане воды поднимается со дна вверх. Для массивов – самый маленький ( «легкий» элемент перемещается вверх «всплывает» ). 2 -ой проход 1 1 1 5 5 2 2 2 5 3 3 3 • Начиная снизу, сравниваем два соседних элемента; если они стоят «неправильно» , меняем их местами; • За 1 проход по массиву один элемент (самый маленький) становится на свое место; 3 -ий проход 1 1 2 2 5 3 3 5 Для сортировки массива из N элементов нужен N-1 проход (достаточно поставить на свои места N-1 элементов).
СОРТИРОВКА МАССИВА МЕТОДОМ ПУЗЫРЬКА Program Sorti 1; Const n=10; Var A: array[1. . n] of integer; i, c, j: integer; BEGIN {Ввод массива} For i: =1 to n-1 do begin For j: =n-1 downto i do If A[j]>A[j+1] then begin c: =A[j]; A[j]: =A[j+1]; A[j+1]: =c; end; For i: =1 to n do Write(A[i]: 4); END. Размерность массива n=10 Исходный массив 12 10 15 3 6 9 11 7 1 5 Результат 1 3 5 6 7 9 10 11 12 15
СОРТИРОВКА МАССИВА МЕТОДОМ ВЫБОРА Program Sorti 2; Const n=10; Var A: array[1. . n] of integer; i, c, j: integer; BEGIN {Ввод массива} For i: =1 to n-1 do begin min: =i; For j: =i+1 to n do If A[j]i then begin c: =A[i]; A[i]: =A[min]; A[min]: =c; end; For i: =1 to n do Write(A[i]: 4); END. Размерность массива n=10 Исходный массив 12 10 15 3 6 9 11 7 1 5 Результат 1 3 5 6 7 9 10 11 12 15
Метод выбора Действия: • найти минимальный элемент и поставить на первое место (поменять местами с A[1]); • из оставшихся найти минимальный элемент и поставить на второе место (поменять местами с A[2]), и т. д. 10 1 1 1 5 5 2 2 1 10 10 5 2 2 5 10