Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
С использованием матричных функций. 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; просмотров: 137; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.81.94 (0.014 с.) |