С использованием матричных функций. Lma=input('Введите число элементов массива '); 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

С использованием матричных функций. Lma=input('Введите число элементов массива ');



Lma=input('Введите число элементов массива ');

disp('Введите элементы массива');

for i=1: Lma

disp(sprintf(' Marr(%g)=',i))

Marr(i)= input('');

end

Marr=sort(Marr)

disp('Отсортированный массив')

disp(Marr)

Если при выполнении внутреннего цикла не произведено ни одной перестановки, то можно сказать, что массив уже отсортирован. Если в исходном массиве Marr при сортировке по возрастанию наименьшее значение имеет последний элемент, то последняя перестановка произойдет на N–1 итерации при сравнении первого и второго элементов. Если же наименьшее значение находилось в массиве не на последнем месте, то упорядоченность может быть достигнута раньше, чем за N–1 проход по массиву. Поэтому можно немного улучшить алгоритм, завершив проходы по массиву, когда он уже будет отсортирован. Следовательно, можно сохранять в некоторой переменной признак выполнения перестановки (например, присваивая ей логическое значение истина) хотя бы в одной из итераций вложенного цикла, и заменяя внешний цикл на алгоритмическую конструкцию «цикл с постусловием», где условием повторения цикла будет «пока i < Lma И признак выполнения перестановок истинен». При этом вычисление номера итерации внешнего цикла i и сброс значения переменной признака в состояние ложь необходимо осуществлять явно.

Введя для хранения признака выполнения перестановки переменную SwapFlag, принимающую одно из двух значений истина или ложь, которые непосредственно можно использовать в логических выражениях, запишем модифицированный алгоритм:

Структурированная запись алгоритма 37.2

1. Ввести натуральное значение в переменную Lma.

2. Ввести массив из Lma элементов в переменную Marr.

3. i = 1.

4. Повторять:

4.1. SwapFlag = ложь.

4.2. Повторять для j от 1 до Lma – i:

4.2.1. Если Marr[j]>Marr[j+1], то:

4.2.1.1. TmEl = Marr[j].

4.2.1.2. Marr[j] = Marr[j+1].

4.2.1.3. Marr[j+1] = TmEl.

4.2.1.4. SwapFlag = истина.

4.3. i = i + 1.

Продолжить повторение, если (i < Lma И SwapFlag = истина).

5. Вывести массив Marr.

Схема алгоритма

 

 

Текст программы на языке Си

#include <stdio.h>

#include <stdlib.h>

/* Использование динамического

выделения памяти для массива*/

int main(void)

{

int Lma=0, i, j, SwapFlag;

double *Marr = NULL, TmEl;

printf("Введите натуральное Lma --\

 число элементов массива Marr: ");

scanf("%d",&Lma);

if((Marr = malloc(Lma*sizeof(double))) == NULL)

{

   printf("Ошибка выделения памяти!");

 printf(" Аварийное завершение программы!\n");

  return 1;

}

for(i=0; i < Lma; i++){

printf("Введите %d-й элемент массива: ",i+1);

scanf("%lf", &Marr[i]);

}

i = 1;

do{

   SwapFlag = 0;

/* j = 0, 1, 2,..., Lma-i-1 -- Lma-i значений: */

   for(j=0; j < Lma-i; j++)

   if(Marr[j] > Marr[j+1]){

       TmEl = Marr[j];

      Marr[j]=Marr[j+1];

      Marr[j+1]=TmEl;

      SwapFlag = 1;

   }

}while(++i < Lma && SwapFlag);

for(i=0;i<Lma;i++)

printf("Marr[%d]=%lg\n",i+1, Marr[i]);

system("pause");

free(Marr);

return 0;

}

Программа на языке Паскаль

Program pr_37_2;

Var Marr: array of real;

i, j, Lma:integer;

TmEl:real;

SwapFlag:Boolean;

begin

writeln('Введите количество элементов');

readln(Lma);

setlength(a, Lma);

writeln('Введите элементы массива');

for i:=0 to Lma-1 do readln(Marr[i]);

   i:=1;

repeat

   SwapFlag:= false;

for j:=0 to Lma-1-i do

    if Marr[j] > Marr[j+1] then

    begin

       TmEl:= Marr[j];

       Marr[j]:=Marr[j+1];

       Marr[j+1]:=TmEl;

       SwapFlag:=true;

    end;

i:=i+1

until (i=Lma) or not SwapFlag;

writeln('Отсортированный массив');

 for i:=0 to Lma-1 do write(Marr[i]:5:1);

readln

Marr:=Nil;

end.

Текст программы на языке Фортран

Program Sort_mas_2

! Сортировка массива

Implicit none

real, allocatable:: Marr(:)

real TmEl

integer i, Lma, j

logical SwapFlag

print *,' Введите количество элементов n'

read *, Lma

allocate (Marr(Lma))

print *,' Введите элементы массива'

read *, Marr

i=1

SwapFlag =.True.

do while (i < Lma.and. SwapFlag)

SwapFlag =.False.

do j=1, Lma-i

    if (Marr(j) > Marr(j+1))then

       TmEl = Marr(j)

       Marr(j) =Marr(j+1)

       Marr(j+1) =TmEl

      SwapFlag =.True.

    endif

enddo

i=i+1

enddo

print *,'Отсортированный массив'

print *, Marr

deallocate (Marr)

end

Программа на языке Python

Lma = 0

while Lma < 1:

print("Введите натуральное Lma -- число \

элементов массива Marr: ")

Lma=int(input())  

Marr = [] # Создаем пустой список

for i in range(1,Lma+1):

# i = 1,..., Lma -- всего Lma

print("Введите {0}-й элемент массива: ".format(i))

Marr.append(float(input()))

i = 1

# в Python нет цикла с постусловием – используем

# цикл с предусловием и предварительным значением

SwapFlag = True

while i < Lma and SwapFlag:

SwapFlag = False

for j in range(1, (Lma-1) + 1):

# j = 1, 2,..., Lma-i -- Lma-i значений

if Marr[j-1] > Marr[j]:

TmEl = Marr[j-1]

Marr[j-1] = Marr[j]

Marr[j] = TmEl

SwapFlag = True    

i = i + 1 

for i in range(1, Lma + 1):

print("Marr[{0}]={1}".format(i, Marr[i-1]))

Программа в системе Матлаб

Lma=input('Введите число элементов массива ');

disp('Введите элементы массива');

for i=1: Lma

disp(sprintf(' Marr (%g)=',i))

Marr (i)= input('');

end

i=1;

SwapFlag = true;

do while (i < Lma && SwapFlag)

for j=1:Lma-i

if Marr(j) > Marr(j+1)

    TmEl = Marr(j);

    Marr(j) =Marr(j+1);

    Marr(j+1) =TmEl;

   SwapFlag = True;

end

end

i=i+1;

end

disp('Отсортированный массив')

disp(Marr)

 



Поделиться:


Последнее изменение этой страницы: 2021-04-12; просмотров: 135; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.214.215 (0.013 с.)