Array115. Дан массив A размера N. Не изменяя данный массив, вывести номера его элементов в том порядке, в котором соответствующие им элементы образуют возрастающую последовательность. Использовать метод «пузырьковой» сортировки (см. задание Array112), модифицировав его следующим образом: создать вспомогательный целочисленный массив номеров I, заполнив его числами от 1 до N; просматривать массив A, сравнивая пары элементов массива A с номерами I1 и I2, I2 и I3, … и меняя местами соответствующие элементы массива I, если левый элемент пары больше правого. Повторив описанную процедуру просмотра N — 1 раз, получим в массиве I требуемую последовательность номеров.
>Решение Pascal
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 31 32 33 34 | program Array115; var a : array [1..6] of real; i: array [1..6] of integer; N,N2,k,k2,k3: integer; begin Write('N: '); Readln(N); Writeln('A: '); for k:=1 to N do begin write(k,' :'); readln(a[k]); i[k]:=k; end; N2:=N; for k:=1 to N-1 do begin k2:=1; N2:=N2-1; while (k2<=N2) do begin if a[i[k2]] > a[i[k2]+1] then begin i[k2]:=i[k2]+i[k2+1]; i[k2+1]:=i[k2]-i[k2+1]; i[k2]:=i[k2]-i[k2+1]; end; inc(k2); end; for k3:=1 to N do writeln(i[k3]); readln; end; end. |
>
Решение C
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 | #include 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; } |