Как использовать двумерный массив, чтобы отловить индекс элемента
есть такая задачка: на вход подается последовательность из n чисел(нечетное), ее надо отсортировать и найти наименьшее число, среднее и самое большое, а потом вывести номера этих чисел(от 1 до n), сохраняя иерархию. Пример:
input.txt
5
10.00 8.70 0.01 5.00 3.00
output.txt
3 4 1
Я написала код, рабочий, но он очень долго обрабатывает, думаю как бы модифицировать, но на ум приходит только завести двумерный массив к arr добавить индексы элементов, а потом их отловить как-то, но не понимаю, как это реализовать. Вот код работающий на python:
with open('input.txt', 'r', encoding='utf-8') as f:
n = int(f.readline())
arr1 = list(map(float, f.read().split()))
arr=arr1.copy()
index=[]
def sort(array,num):
massiv=[]
for i in range(n):
j = i - 1
key = array[i]
while j >= 0 and array[j] > key:
array[j + 1] = array[j]
j -= 1
array[j + 1] = key
massiv.append(arr[0])
massiv.append(arr[n//2])
massiv.append(arr[n-1])
return massiv
mas=sort(arr, n)
for i in range(n):
if arr1[i] == mas[0]:
index.append(i+1)
for i in range(n):
if arr1[i] == mas[1]:
index.append(i+1)
for i in range(n):
if arr1[i] == mas[2]:
index.append(i+1)
with open('output.txt', 'w', encoding='utf-8') as f:
f.write(" ".join(map(str, index)))
Ответы (2 шт):
Автор решения: MBo
→ Ссылка
tup = [(x, i) for i, x in enumerate(arr1)]
tup.sort()
print(tup[0][1], tup[len(tup) // 2][1], tup[-1][1])
Автор решения: Yarik_bodrov
→ Ссылка
print(arr1.index(min(arr1)) + 1, arr1.index(sorted(arr1)[len(arr1) // 2]) + 1,
arr1.index(max(arr1)) + 1)