Поменять местами минимальный и максимальный элементы

Задача

В массиве случайных целых чисел поменять местами минимальный и максимальный элементы.

Пояснение к задаче и алгоритм решения

Эта задача состоит из двух частей:

  1. Поиск минимума и максимума (а лучше их индексов).
  2. Обмен минимального и максимального элемента местами.

Поиск минимума:

  1. Присвоить переменной первый индекс массива.
  2. Перебрать все элементы массива в цикле, начиная со второго. Проверить каждый, не меньше ли он элемента под индексом, записанным в переменной п.1. Если это так, то присвоить этой переменной текущий индекс.

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

Пример обмена местами минимума и максимума массива:

  1. Присвоить буферной переменной значение минимума.
  2. Записать по индексу минимума максимум массива.
  3. Записать по индексу максимума значение, хранимое в буферной переменной.

Исходный код на языке программирования Pascal

const N = 15;
var
    arr: array[1..N] of integer;
    min, max, i: byte;
    b: integer;
begin
    randomize;
    for i:=1 to N do begin
        arr[i] := random(100);
        write(arr[i],' ');
    end;
    writeln;
    min := 1;
    max := 1;
    for i:=2 to N do begin
        if arr[i] < arr[min] then
            min := i;
        if arr[i] > arr[max] then
            max := i;
    end;
    writeln('arr[',min,']=',arr[min],' arr[',max,']=',arr[max]);
    b := arr[min];
    arr[min] := arr[max];
    arr[max] := b;
    for i:=1 to N do
        write(arr[i],' ');
    writeln;
end.

Пример(ы) выполнения программы на языке Pascal

94 64 42 1 72 3 88 52 3 67 32 15 31 32 65
arr[4]=1 arr[1]=94
1 64 42 94 72 3 88 52 3 67 32 15 31 32 65

Исходный код на языке программирования C

#include <stdio.h>
#define N 15
main() {
    int arr[N], i, min, max, b;
    srand(time(NULL));
    min = 0;
    max = 0;
    for (i=0; i<N; i++) {
        arr[i] = rand() % 100;
        printf("%d ", arr[i]);
        if (arr[i] < arr[min]) min = i;
        if (arr[i] > arr[max]) max = i;
    }
    printf("\n");
    printf("arr[%d]=%d arr[%d]=%d\n",min+1,arr[min],max+1,arr[max]);
    b = arr[min];
    arr[min] = arr[max];
    arr[max] = b;
    for (i=0; i<N; i++)
        printf("%d ", arr[i]);
    printf("\n");
}

Исходный код на языке программирования Python

from random import random
N = 15
arr = [0]*N
for i in range(N):
    arr[i] = int(random()*100)
    print(arr[i],end=' ')
print()
 
# 1-й вариант
mn = min(arr)
mx = max(arr)
imn = arr.index(mn)
imx = arr.index(mx)
print('arr[%d]=%d arr[%d]=%d' % (imn+1, mn, imx+1, mx))
arr[imn],arr[imx] = arr[imx],arr[imn]
 
# 2-й вариант (классический)
#~ mn = 0
#~ mx = 0
#~ for i in range(N):
    #~ if arr[i] < arr[mn]:
        #~ mn = i
    #~ elif arr[i] > arr[mx]:
        #~ mx = i
#~ print('arr[%d]=%d arr[%d]=%d' % (mn+1, arr[mn], mx+1, arr[mx]))
#~ b = arr[mn]
#~ arr[mn] = arr[mx]
#~ arr[mx] = b
 
for i in range(15):
    print(arr[i],end=' ')
print()

Особенности решения на языке программирования Python

В языке программирования Питон есть функции min() и max(), возвращающие соответственно минимальный и максимальный элементы последовательностей. Метод index() возвращает индекс (номер) элемента в последовательности.

Исходный код на языке программирования КуМир

алг
нач
  цел N = 15
  целтаб arr[1:N]
  цел mn, mx, i, b
  нц для i от 1 до N
    arr[i] := irnd(100)
    вывод arr[i], " "  
  кц
  вывод нс
  mn := 1
  mx := 1
  нц для i от 2 до N
    если arr[i] < arr[mn] то
      mn := i
    все
    если arr[i] > arr[mx] то
      mx := i
    все
  кц
  вывод "arr[", mn, "]=", arr[mn], нс
  вывод "arr[", mx, "]=", arr[mx], нс
  b := arr[mn]
  arr[mn] := arr[mx]
  arr[mx] := b
  нц для i от 1 до N
    вывод arr[i], " "
  кц
кон

Пример(ы) выполнения программы на языке КуМир

37 67 3 48 54 89 27 22 46 20 14 35 28 70 51
arr[3]=3
arr[6]=89
37 67 89 48 54 3 27 22 46 20 14 35 28 70 51

Исходный код на языке программирования Basic

N = 10
dim arr(N)
 
for i=0 to N-1
        arr[i] = int(rand*100)
        print arr[i]+" ";
next i
print
 
min = 0
max = 0
for i=1 to N-1
        if arr[i] < arr[min] then min = i
        if arr[i] > arr[max] then max = i
next i
print "arr["+(min+1)+"]="+arr[min]
print "arr["+(max+1)+"]="+arr[max]
 
b =  arr[min]
arr[min] = arr[max]
arr[max] = b
for i=0 to N-1
        print arr[i]+" ";
next i
print

Пример(ы) выполнения программы на языке Basic

37 78 17 99 97 49 78 9 54 24
arr[8]=9
arr[4]=99
37 78 17 9 97 49 78 99 54 24

Тема

Массивы

Уровень сложности

Средний

Дата публикации