Найти два наименьших (минимальных) элемента массива
Просмотров 7.6к. Обновлено 15 октября 2021
В одномерном массиве целых чисел определить два наименьших элемента. Они могут быть как равны между собой (оба являться минимальными), так и различаться.
Сначала можно найти минимальный элемент массива. После этого искать второй минимум, исключив их поиска первый с помощью if. Данный способ рассматривается здесь по отношению к двум наибольшим элементам.
Сложнее задачу решить, используя один цикл перебора.
Предположим, что двумя наименьшими элементами массива являются первый и второй элемент. Присвоим их индексы переменным m1 и m2. При этом, если первый элемент меньше второго, то его индекс присвоим m1, иначе m1 получит значение второго элемента, а m2 первого.
Начнем перебирать массив в цикле, начиная с третьего элемента. Если он меньше элемента, чей индекс хранится в m1, то присвоим индекс текущего элемента m1. Иначе (если значение по индексу m1 меньше, чем по индексу i) будем проверять, не меньше ли значение по индексу i, того что по индексу m2.
Есть один не очевидный нюанс. Допустим, в m1 указывало на значение 5, а m2 — на 10. Очередной элемент равен 3. Мы меняем m1, и забываем о числе 5. Однако оно может оказаться как раз вторым минимумом массива.
Поэтому в программе при изменении значения m1 надо предусмотреть проверку, не меньше ли теряемое значение, чем то, что хранится по индексу m2.
Pascal
const
N = 10;
var
a: array[1..N] of integer;
i, min1, min2, buff: byte;
begin
randomize;
for i:=1 to N do begin
a[i] := random(100);
write(a[i]:4);
end;
writeln;if a[1] < a[2] then begin
min1 := 1;
min2 := 2;
end
else begin
min1 := 2;
min2 := 1;
end;for i:=3 to N do
if a[i] < a[min1] then begin
buff := min1;
min1 := i;
if a[buff] < a[min2] then
min2 := buff;
end
else
if a[i] < a[min2] then
min2 := i;writeln('№', min1:2,': ', a[min1]:2);
writeln('№', min2:2,': ', a[min2]:2);
end.
8 66 40 40 0 14 50 74 93 71
№ 5: 0
№ 1: 8
Язык Си
#include < stdio.h>
#define N 10
main() {
int a[N];
int i, min1, min2, buff;
srand(time(NULL));
for (i=0; i< N; i++) {
a[i] = rand() % 100;
printf("%3d", a[i]);
}
printf("n");if (a[0] < a[1]) {
min1 = 0;
min2 = 1;
} else {
min1 = 1;
min2 = 0;
}for (i=2; i< N; i++) {
if (a[i] < a[min1]) {
buff = min1;
min1 = i;
if (a[buff] < a[min2]) min2 = buff;
} else {
if (a[i] < a[min2]) min2 = i;
}
}printf("№%2d:%3dn",min1+1,a[min1]);
printf("№%2d:%3dn",min2+1,a[min2]);
}
97 20 88 29 20 43 87 19 33 26
№ 8: 19
№ 5: 20
Python
найти два минимальных элемента массива python
from random import random
N = 10
a = []
for i in range(N):
a.append(int(random()*100))
print("%3d" % a[i], end='')
print()if a[0] > a[1]:
min1 = 0
min2 = 1
else:
min1 = 1
min2 = 0for i in range(2,N):
if a[i] < a[min1]:
b = min1
min1 = i
if a[b] < a[min2]:
min2 = b
elif a[i] < a[min2]:
min2 = iprint("№%3d:%3d" % (min1+1, a[min1]))
print("№%3d:%3d" % (min2+1, a[min2]))# Вариант 2
from random import randint
array = [randint(1, 20) for i in range(10)]
print(array)min1 = min(array)
array.remove(min1)
min2 = min(array)print(min1)
print(min2)
14 3 40 56 42 43 89 69 64 72
№ 1: 14
№ 2: 3
КуМир
алг два минимальных
нач
цел N = 10
цел таб arr[1:N]
цел i,m1,m2,b
нц для i от 1 до N
arr[i] := irand(10,100)
вывод arr[i]:3
кц
вывод нсесли arr[1] < arr[2] то
m1 := 1
m2 := 2
иначе
m1 := 2
m2 := 1
всенц для i от 3 до N
если arr[i] < arr[m1] то
b := m1
m1 := i
если arr[b] < arr[m2] то
m2 := b
все
иначе
если arr[i] < arr[m2] то
m2 := i
все
все
кц
вывод "№",m1:2,":",arr[m1]:3,нс
вывод "№",m2:2,":",arr[m2]:3,нс
кон
65 32 24 86 65 58 67 55 33 96
№ 3: 24
№ 2: 32
Basic-256
N = 10
dim arr(N)
for i=0 to N-1
arr[i] = int(rand*100)
print arr[i] + " ";
next iif arr[0] < arr[1] then
m1 = 0
m2 = 1
else
m1 = 1
m2 = 0
endiffor i=2 to N-1
if arr[i] < arr[m1] then
b = m1
m1 = i
if arr[b] < arr[m2] then
m2 = b
endif
else
if arr[i] < arr[m2] then
m2 = i
endif
endif
next iprint (m1+1) + ": " + arr[m1]
print (m2+1) + ": " + arr[m2]
81 7 25 71 23 9 56 91 73 64
2: 7
6: 9
Необходимо найти два min значения в массиве случайных числе.
Код написан под swift.
var list = [Int] ()
var n: Int = 8
for i in 1...n
{
let list = Int(arc4random_uniform(70))
print (list)
}
func getMin1Min2(numbers:Int...) -> (min1:Int, min2:Int)
{
var min1 = numbers[0]
var min2 = numbers[0]
for number in numbers
{
if number < min1 {min1 = number}
Дальше попытка найти 2-ое минимальное значение, но увы …
if number > min1
{if number < min2
{min2 = number}
}
}
return (min1, min2)
}
завершаться задача должна поиском двух мин. значений в рандомном массиве, но увы не знаю как использовать созданный массив и функцию …
var value = getMin1Min2 (list)
задан 28 мая 2016 в 18:08
1
Для начала, Вы не заполняете массив. Вот создаете массив:
let n = 8
var arr = [Int]()
for _ in 0..<n {
arr.append(Int(arc4random_uniform(70)))
}
print(arr)
Далее ищете 2 минимальных элемента в массиве, предлагаю просто отсортировать массив по возрастанию и возвращать первые 2 элемента:
func getMin1Min2(numbers:[Int]) -> (min1:Int, min2:Int){
let sortedNumbers = numbers.sort({$0 < $1})
return sortedNumbers.count > 1 ? (sortedNumbers[0], sortedNumbers[1]) : (sortedNumbers[0], sortedNumbers[0])
}
И проверка:
print(getMin1Min2(arr))
ответ дан 29 мая 2016 в 5:05
VAndrJVAndrJ
15.8k1 золотой знак18 серебряных знаков35 бронзовых знаков
Вариант 1: сделай копию массива, найди в нем минимум и удали его. Потом найди минимум еще раз.
Для не очень больших массивов подойдет.
Вариант 2: находишь первый минимум (запоминаешь его индекс).
Еще раз ищешь минимум в массиве, но уже не сравниваешь элемент с найденным индексом.
var myMin = MAX_INT
for i in 0..myArray.count {
if (myArray[i] < myMin && i != indexOfFirstMin ){
myMin = myArray[i]
}
}
Denis
8,86010 золотых знаков30 серебряных знаков55 бронзовых знаков
ответ дан 14 июн 2016 в 12:18
ВалентинВалентин
1,1056 серебряных знаков6 бронзовых знаков
0
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Find the first, second and third minimum elements in an array in O(n).
Examples:
Input : 9 4 12 6 Output : First min = 4 Second min = 6 Third min = 9 Input : 4 9 1 32 12 Output : First min = 1 Second min = 4 Third min = 9
First approach : First we can use normal method that is sort the array and then print first, second and third element of the array. Time complexity of this solution is O(n Log n).
C++
#include<bits/stdc++.h>
using
namespace
std;
int
Print3Smallest(
int
array[],
int
n)
{
sort(array,array+n);
cout <<
"First min = "
<< array[0] <<
"n"
;
cout <<
"Second min = "
<< array[1] <<
"n"
;
cout <<
"Third min = "
<< array[2] <<
"n"
;
}
int
main()
{
int
array[] = {4, 9, 1, 32, 12};
int
n =
sizeof
(array) /
sizeof
(array[0]);
Print3Smallest(array, n);
return
0;
}
Java
import
java.util.Arrays;
public
class
Main {
static
void
Print3Smallest(
int
array[],
int
n) {
Arrays.sort(array);
System.out.println(
"First min = "
+ array[
0
]);
System.out.println(
"Second min = "
+ array[
1
]);
System.out.println(
"Third min = "
+ array[
2
]);
}
public
static
void
main(String[] args) {
int
array[] = {
4
,
9
,
1
,
32
,
12
};
int
n = array.length;
Print3Smallest(array, n);
}
}
Python3
def
print_3_smallest(array):
array.sort()
print
(
"First min ="
, array[
0
])
print
(
"Second min ="
, array[
1
])
print
(
"Third min ="
, array[
2
])
if
__name__
=
=
'__main__'
:
array
=
[
4
,
9
,
1
,
32
,
12
]
n
=
len
(array)
print_3_smallest(array)
C#
using
System;
using
System.Linq;
class
Program
{
static
void
Print3Smallest(
int
[] array,
int
n)
{
Array.Sort(array);
Console.WriteLine(
"First min = "
+ array[0]);
Console.WriteLine(
"Second min = "
+ array[1]);
Console.WriteLine(
"Third min = "
+ array[2]);
}
static
void
Main()
{
int
[] array = {4, 9, 1, 32, 12};
int
n = array.Length;
Print3Smallest(array, n);
}
}
Javascript
function
Print3Smallest(array,n){
array.sort((a, b) => a - b);
console.log(
'First min = '
+ array[0]);
console.log(
'Second min = '
+ array[1]);
console.log(
'Third min = '
+ array[2]);
}
let array = [4, 9, 1, 32, 12];
Print3Smallest(array,array.length);
Output
First min = 1 Second min = 4 Third min = 9
Second approach : Time complexity of this solution is O(n).
Algorithm:
- First take an element
- then if array[index] < Firstelement
- Thirdelement = Secondelement
- Secondelement = Firstelement
- Firstelement = array[index]
- else if array[index] < Secondelement
- Thirdelement = Secondelement
- Secondelement = array[index]
- else if array[index] < Thirdelement
- Thirdelement = array[index]
- then print all the element
Implementation:
C++
#include<bits/stdc++.h>
#define MAX 100000
using
namespace
std;
int
Print3Smallest(
int
array[],
int
n)
{
int
firstmin = MAX, secmin = MAX, thirdmin = MAX;
for
(
int
i = 0; i < n; i++)
{
if
(array[i] < firstmin)
{
thirdmin = secmin;
secmin = firstmin;
firstmin = array[i];
}
else
if
(array[i] < secmin)
{
thirdmin = secmin;
secmin = array[i];
}
else
if
(array[i] < thirdmin)
thirdmin = array[i];
}
cout <<
"First min = "
<< firstmin <<
"n"
;
cout <<
"Second min = "
<< secmin <<
"n"
;
cout <<
"Third min = "
<< thirdmin <<
"n"
;
}
int
main()
{
int
array[] = {4, 9, 1, 32, 12};
int
n =
sizeof
(array) /
sizeof
(array[0]);
Print3Smallest(array, n);
return
0;
}
Java
import
java.util.*;
public
class
GFG
{
static
void
Print3Smallest(
int
array[],
int
n)
{
int
firstmin = Integer.MAX_VALUE;
int
secmin = Integer.MAX_VALUE;
int
thirdmin = Integer.MAX_VALUE;
for
(
int
i =
0
; i < n; i++)
{
if
(array[i] < firstmin)
{
thirdmin = secmin;
secmin = firstmin;
firstmin = array[i];
}
else
if
(array[i] < secmin)
{
thirdmin = secmin;
secmin = array[i];
}
else
if
(array[i] < thirdmin)
thirdmin = array[i];
}
System.out.println(
"First min = "
+ firstmin );
System.out.println(
"Second min = "
+ secmin );
System.out.println(
"Third min = "
+ thirdmin );
}
public
static
void
main(String[] args)
{
int
array[] = {
4
,
9
,
1
,
32
,
12
};
int
n = array.length;
Print3Smallest(array, n);
}
}
Python3
MAX
=
100000
def
Print3Smallest(arr, n):
firstmin
=
MAX
secmin
=
MAX
thirdmin
=
MAX
for
i
in
range
(
0
, n):
if
arr[i] < firstmin:
thirdmin
=
secmin
secmin
=
firstmin
firstmin
=
arr[i]
elif
arr[i] < secmin:
thirdmin
=
secmin
secmin
=
arr[i]
elif
arr[i] < thirdmin:
thirdmin
=
arr[i]
print
(
"First min = "
, firstmin)
print
(
"Second min = "
, secmin)
print
(
"Third min = "
, thirdmin)
arr
=
[
4
,
9
,
1
,
32
,
12
]
n
=
len
(arr)
Print3Smallest(arr, n)
C#
using
System;
class
GFG
{
static
void
Print3Smallest(
int
[]array,
int
n)
{
int
firstmin =
int
.MaxValue;
int
secmin =
int
.MaxValue;
int
thirdmin =
int
.MaxValue;
for
(
int
i = 0; i < n; i++)
{
if
(array[i] < firstmin)
{
thirdmin = secmin;
secmin = firstmin;
firstmin = array[i];
}
else
if
(array[i] < secmin)
{
thirdmin = secmin;
secmin = array[i];
}
else
if
(array[i] < thirdmin)
thirdmin = array[i];
}
Console.WriteLine(
"First min = "
+ firstmin );
Console.WriteLine(
"Second min = "
+ secmin );
Console.WriteLine(
"Third min = "
+ thirdmin );
}
static
void
Main()
{
int
[]array =
new
int
[]{4, 9, 1, 32, 12};
int
n = array.Length;
Print3Smallest(array, n);
}
}
PHP
<?php
function
Print3Smallest(
$array
,
$n
)
{
$MAX
= 100000;
$firstmin
=
$MAX
;
$secmin
=
$MAX
;
$thirdmin
=
$MAX
;
for
(
$i
= 0;
$i
<
$n
;
$i
++)
{
if
(
$array
[
$i
] <
$firstmin
)
{
$thirdmin
=
$secmin
;
$secmin
=
$firstmin
;
$firstmin
=
$array
[
$i
];
}
else
if
(
$array
[
$i
] <
$secmin
)
{
$thirdmin
=
$secmin
;
$secmin
=
$array
[
$i
];
}
else
if
(
$array
[
$i
] <
$thirdmin
)
$thirdmin
=
$array
[
$i
];
}
echo
"First min = "
.
$firstmin
.
"n"
;
echo
"Second min = "
.
$secmin
.
"n"
;
echo
"Third min = "
.
$thirdmin
.
"n"
;
}
$array
=
array
(4, 9, 1, 32, 12);
$n
= sizeof(
$array
) / sizeof(
$array
[0]);
Print3Smallest(
$array
,
$n
);
?>
Javascript
<script>
let MAX = 100000
function
Print3Smallest( array, n)
{
let firstmin = MAX, secmin = MAX, thirdmin = MAX;
for
(let i = 0; i < n; i++)
{
if
(array[i] < firstmin)
{
thirdmin = secmin;
secmin = firstmin;
firstmin = array[i];
}
else
if
(array[i] < secmin)
{
thirdmin = secmin;
secmin = array[i];
}
else
if
(array[i] < thirdmin)
thirdmin = array[i];
}
document.write(
"First min = "
+ firstmin +
"</br>"
);
document.write(
"Second min = "
+ secmin +
"</br>"
);
document.write(
"Third min = "
+ thirdmin +
"</br>"
);
}
let array = [4, 9, 1, 32, 12];
let n = array.length;
Print3Smallest(array, n);
</script>
Output
First min = 1 Second min = 4 Third min = 9
Time Complexity: O(n)
Auxiliary Space: O(1)
Last Updated :
09 Mar, 2023
Like Article
Save Article
Оглавление:
- 1 Задача — Найти два наименьших (минимальных) элемента массива
— программирование на Pascal, Си, Кумир, Basic-256, Python- 1.1 Pascal
- 1.2 Язык Си
- 1.3 Python
- 1.4 КуМир
- 1.5 Basic-256
Задача — Найти два наименьших (минимальных) элемента массива
— программирование на Pascal, Си, Кумир, Basic-256, Python
В одномерном массиве целых чисел определить два наименьших элемента. Они могут быть как равны между собой (оба являться минимальными), так и различаться.
Сначала можно найти минимальный элемент массива. После этого искать второй минимум, исключив их поиска первый с помощью if. Данный способ рассматривается здесь по отношению к двум наибольшим элементам.
Сложнее задачу решить, используя один цикл перебора.
Предположим, что двумя наименьшими элементами массива являются первый и второй элемент. Присвоим их индексы переменным m1 и m2. При этом, если первый элемент меньше второго, то его индекс присвоим m1, иначе m1 получит значение второго элемента, а m2 первого.
Начнем перебирать массив в цикле, начиная с третьего элемента. Если он меньше элемента, чей индекс хранится в m1, то присвоим индекс текущего элемента m1. Иначе (если значение по индексу m1 меньше, чем по индексу i) будем проверять, не меньше ли значение по индексу i, того что по индексу m2.
Есть один не очевидный нюанс. Допустим, в m1 указывало на значение 5, а m2 — на 10. Очередной элемент равен 3. Мы меняем m1, и забываем о числе 5. Однако оно может оказаться как раз вторым минимумом массива.
Поэтому в программе при изменении значения m1 надо предусмотреть проверку, не меньше ли теряемое значение, чем то, что хранится по индексу m2.
Pascal
const
N = 10;
var
a: array[1..N] of integer;
i, min1, min2, buff: byte;
begin
randomize;
for i:=1 to N do begin
a[i] := random(100);
write(a[i]:4);
end;
writeln;
if a[1] < a[2] then begin
min1 := 1;
min2 := 2;
end
else begin
min1 := 2;
min2 := 1;
end;
for i:=3 to N do
if a[i] < a[min1] then begin
buff := min1;
min1 := i;
if a[buff] < a[min2] then
min2 := buff;
end
else
if a[i] < a[min2] then
min2 := i;
writeln(‘№’, min1:2,’: ‘, a[min1]:2);
writeln(‘№’, min2:2,’: ‘, a[min2]:2);
end. 8 66 40 40 0 14 50 74 93 71
№ 5: 0
№ 1: 8
Язык Си
#include <stdio.h>
#define N 10
main() {
int a[N];
int i, min1, min2, buff;
srand(time(NULL));
for (i=0; i<N; i++) {
a[i] = rand() % 100;
printf(«%3d», a[i]);
}
printf(«n»);
if (a[0] < a[1]) {
min1 = 0;
min2 = 1;
} else {
min1 = 1;
min2 = 0;
}
for (i=2; i<N; i++) {
if (a[i] < a[min1]) {
buff = min1;
min1 = i;
if (a[buff] < a[min2]) min2 = buff;
} else {
if (a[i] < a[min2]) min2 = i;
}
}
printf(«№%2d:%3dn»,min1+1,a[min1]);
printf(«№%2d:%3dn»,min2+1,a[min2]);
} 97 20 88 29 20 43 87 19 33 26
№ 8: 19
№ 5: 20
Python
from random import random
N = 10
a = []
for i in range(N):
a.append(int(random()*100))
print(«%3d» % a[i], end=»)
print()
if a[0] > a[1]:
min1 = 0
min2 = 1
else:
min1 = 1
min2 = 0
for i in range(2,N):
if a[i] < a[min1]:
b = min1
min1 = i
if a[b] < a[min2]:
min2 = b
elif a[i] < a[min2]:
min2 = i
print(«№%3d:%3d» % (min1+1, a[min1]))
print(«№%3d:%3d» % (min2+1, a[min2])) 14 3 40 56 42 43 89 69 64 72
№ 1: 14
№ 2: 3
КуМир
алг два минимальных
нач
цел N = 10
цел таб arr[1:N]
цел i,m1,m2,b
нц для i от 1 до N
arr[i] := irand(10,100)
вывод arr[i]:3
кц
вывод нс
если arr[1] < arr[2] то
m1 := 1
m2 := 2
иначе
m1 := 2
m2 := 1
все
нц для i от 3 до N
если arr[i] < arr[m1] то
b := m1
m1 := i
если arr[b] < arr[m2] то
m2 := b
все
иначе
если arr[i] < arr[m2] то
m2 := i
все
все
кц
вывод «№»,m1:2,»:»,arr[m1]:3,нс
вывод «№»,m2:2,»:»,arr[m2]:3,нс
кон 65 32 24 86 65 58 67 55 33 96
№ 3: 24
№ 2: 32
Basic-256
N = 10
dim arr(N)
for i=0 to N-1
arr[i] = int(rand*100)
print arr[i] + » «;
next i
print
if arr[0] < arr[1] then
m1 = 0
m2 = 1
else
m1 = 1
m2 = 0
endif
for i=2 to N-1
if arr[i] < arr[m1] then
b = m1
m1 = i
if arr[b] < arr[m2] then
m2 = b
endif
else
if arr[i] < arr[m2] then
m2 = i
endif
endif
next i
print (m1+1) + «: » + arr[m1]
print (m2+1) + «: » + arr[m2] 81 7 25 71 23 9 56 91 73 64
2: 7
6: 9
Did you find apk for android? You can find new Free Android Games and apps.
Как вычислить 2 наименьших нечетных элемента массива в языке С?
-
Вопрос заданболее двух лет назад
-
193 просмотра
Решайте задачу по частям. Сначала выведите все нечетные элементы в массиве.
Потом (отдельно) найдите в массиве 2 наименьших элемента.
Потом совместите 2 алгоритма.
Пригласить эксперта
Так?
int Arr[] = {.......};
int min1 = (2<<31) -1, min2 = (2<<31) -1;
for(int i = 0; i < size; ++i)
{
if(min1 % 2 == 1 && Arr[i] < min1)
min1 = Arr[i];
else if(min2 % 2 == 1 && Arr[i] < min2)
min2 = Arr[i];
}
-
Показать ещё
Загружается…
26 мая 2023, в 02:01
10000 руб./за проект
26 мая 2023, в 01:06
500 руб./за проект
26 мая 2023, в 00:08
2500 руб./за проект