Array115. Дан массив $$A$$ размера $$N$$. Не изменяя данный массив, вывести номера его элементов в том порядке, в котором соответствующие им элементы образуют возрастающую последовательность. Использовать метод «пузырьковой» сортировки (см. задание Array112), модифицировав его следующим образом: создать вспомогательный целочисленный массив номеров $$I$$, заполнив его числами от $$1$$ до $$N$$; просматривать массив $$A$$, сравнивая пары элементов массива $$A$$ с номерами $$I_1$$ и $$I_2$$, $$I_2$$ и $$I_3$$, … и меняя местами соответствующие элементы массива $$I$$, если левый элемент пары больше правого. Повторив описанную процедуру просмотра $$N — 1$$ раз, получим в массиве I требуемую последовательность номеров.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <stdio.h> int main(void) { int a[20]; int i[20]; int n; printf("N: "); scanf("%i",&n); int i4; for (i4=0; i4<n; ++i4){ printf("a[%i] : ",i4+1); scanf("%i",&a[i4]); i[i4]=i4; } int i2,i3; for (i4=0; i4<n; ++i4){ for (i2=0; i2<=n-i4-2; ++i2){ if (a[i[i2]]>a[i[i2]+1]){ i[i2]+=i[i2+1]; i[i2+1]=i[i2]-i[i2+1]; i[i2]-=i[i2+1]; } } for (i3=0; i3<n;++i3) printf(" %i: %i\n",i3+1,i[i3]+1); } return 0; } |
Другие задачи из раздела Array можно посмотреть здесь.
Комментарии: