Студопедия — Теоретические сведения. Упорядочение в одномерных массивах
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Теоретические сведения. Упорядочение в одномерных массивах






 

Упорядочение в одномерных массивах. Для демонстрации некоторых особенностей вложения циклов и работы с массивами рассмотрим простейшие алгоритмы сортировки. Необходимо, введя значение переменной 1<n<=100 и значения n первых элементов массива а[0],а[1],...,а[n-1], упорядочить эти первые элементы массива по возрастанию их значений. Текст первого варианта программы:

/* Упорядочение элементов массива */

#include <stdio.h>

main()

{

int n,i,j;

double a[100],b;

while(1)

{

printf("\n Введите количество элементов n=");

scanf("%d",&n);

if (n > 1 && n <= 100) break;

printf ("Ошибка! Необходимо 1<n<=100! ");

}

printf("\n Введите значения элементов массива:\n");

for(j=0; j<n;j++)

{

printf("a[%d]=”, j+1);

scanf(“%lf”,&a[j]);

}

for(i=0; i<n-1; i++)

for(j=i+l; j<n; j++)

if(a[i]>a[j])

{

b=a[i]; a[i]=a[j];. a[j]=b;

}

printf("\n Упорядоченный массив: \n");

for(j=0; j<n; j++)

printf("a[%d]=%f\n", j+1,a[j]);

}

При заполнении массива и при печати результатов его упорядочения индексация элементов выполнена от 1 до n, как это обычно принято в математике. В программе на Си это соответствует изменению индекса от 0 до (n-1).

В. программе реализован алгоритм прямого упорядочения - каждый элемент a[i], начиная с а[0] и кончая а[n-2], сравнивается со всеми последующими, и на место a[i] выбирается минимальный. Таким образом, а[0] принимает минимальное значение, а[1] - минимальное из оставшихся и т.д. Недостаток этого алгоритма состоит в том, что в нем фиксированное число сравнений, не зависимое от исходного расположения значений элементов. Даже для уже упорядоченного массива придется выполнить то же самое количество итераций (n-1)*n/2, так как условия окончания циклов не связаны со свойствами, т.е. с размещением элементов массива.

Алгоритм попарного сравнения соседних элементов позволяет в ряде случаев уменьшить количество итераций при упорядочении. В цикле от 0 до n-2 каждый элемент a[i] массива сравнивается с последующим a[i+l] (0<i<n-l). Если a[i]>a[i+l], то значения этих элементов меняются местами. Упорядочение заканчивается, если оказалось, что a[i] не больше a[i+l] для всех i. Пусть k - количество перестановок при очередном просмотре. Тогда упорядочение можно осуществить с помощью такой последовательности операторов:

do {

for (i=0, k=0; i<n-l; i++)

if (a[i] > a[i+l])

{

b=a[i]; a[i]=a[i+1]; a[i+1]=b;

k=k+l;

}

n--;

}

while (k > 0);

Здесь количество повторений внешнего цикла зависит от исходного расположения значений элементов массива. После первого завершения внутреннего цикла элемент а[n-1] становится максимальным. После второго окончания внутреннего цикла на место а[n-2] выбирается максимальный из оставшихся элементов и т.д. Таким образом, после j-гo выполнения внутреннего цикла элементы a[n-j],...,a[n-l] уже упорядочены, и следующий внутренний цикл достаточно выполнить только для 0<i<(n-j-l). Именно поэтому после каждого окончания внутреннего цикла значение n уменьшается на 1.

В случае упорядоченности исходного массива внешний цикл повторяется только один раз, при этом выполняется (n-1) сравнений, k остается равным 0. Для случая, когда исходный массив упорядочен по убыванию, количество итераций внешнего цикла равно (n-1), а внутренний цикл последовательно выполняется (n-1)*n/2 раз.

Задание. Написать программу на СИ для задачи, указанной в таблице 24. Имя и размер массива выбрать самостоятельно.

Таблица 24

Вар. Условие задачи
  Найти сумму двух наибольших четных чисел массива
  Найти произведение двух наибольших нечетных чисел массива
  Найти произведение двух наибольших четных чисел массива
  Найти сумму двух наибольших нечетных чисел массива
  Найти сумму трех наибольших четных чисел массива
  Найти сумму двух наименьших четных чисел массива
  Найти сумму двух наименьших нечетных чисел массива
  Найти сумму трех наименьших нечетных чисел массива
  Найти сумму двух наименьших положительных чисел массива
  Найти сумму двух наибольших отрицательных чисел массива
  Найти сумму трех наименьших положительных чисел массива
  Найти произведение двух наименьших положительных чисел массива
  Найти произведение двух наибольших отрицательных чисел массива
  Найти произведение трех наибольших кратных 5 чисел массива
  Найти произведение трех наименьших не кратных 4 чисел массива
  Найти произведение трех наибольших положительных кратных 3 чисел массива
  Найти произведение трех наименьших отрицательных нечетных чисел массива
  Найти сумму трех наименьших положительных четных чисел массива
  Найти сумму трех наибольших нечетных, лежащих в интервале [1,30], чисел массива
  Найти произведение четырех наименьших, лежащих в интервале [-20,20], чисел массива
  Найти сумму четырех наименьших кратных 5 и не больших 50 чисел массива
  Найти произведение двух наибольших и двух наименьших положительных четных чисел массива
  Найти сумму двух наибольших и двух наименьших отрицательных четных чисел массива
  Найти произведение двух наибольших и двух наименьших отрицательных нечетных чисел массива
  Найти сумму двух наибольших и двух наименьших нечетных чисел массива, лежащих в интервале [1,25]
  Найти произведение двух наибольших и двух наименьших положительных кратных 3 чисел массива
  Найти сумму двух наибольших и двух наименьших кратных 3 и не меньших 10 чисел массива
  Найти произведение двух наибольших и двух наименьших кратных 5 и не больших 20 чисел массива
  Найти сумму трех наибольших, не кратных 5 положительных чисел массива
  Найти произведение трех наименьших отрицательных кратных 3 чисел массива

 

Лабораторная работа № 13

 

Многомерные массивы.







Дата добавления: 2015-09-15; просмотров: 421. Нарушение авторских прав; Мы поможем в написании вашей работы!



Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

Выработка навыка зеркального письма (динамический стереотип) Цель работы: Проследить особенности образования любого навыка (динамического стереотипа) на примере выработки навыка зеркального письма...

Словарная работа в детском саду Словарная работа в детском саду — это планомерное расширение активного словаря детей за счет незнакомых или трудных слов, которое идет одновременно с ознакомлением с окружающей действительностью, воспитанием правильного отношения к окружающему...

Правила наложения мягкой бинтовой повязки 1. Во время наложения повязки больному (раненому) следует придать удобное положение: он должен удобно сидеть или лежать...

Предпосылки, условия и движущие силы психического развития Предпосылки –это факторы. Факторы психического развития –это ведущие детерминанты развития чел. К ним относят: среду...

Анализ микросреды предприятия Анализ микросреды направлен на анализ состояния тех со­ставляющих внешней среды, с которыми предприятие нахо­дится в непосредственном взаимодействии...

Типы конфликтных личностей (Дж. Скотт) Дж. Г. Скотт опирается на типологию Р. М. Брансом, но дополняет её. Они убеждены в своей абсолютной правоте и хотят, чтобы...

Studopedia.info - Студопедия - 2014-2024 год . (0.009 сек.) русская версия | украинская версия