Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2-ОСНОВЫ ПРОГРАММИРОВАНИЯ.doc
Скачиваний:
88
Добавлен:
10.04.2015
Размер:
650.24 Кб
Скачать
      1. Перестановка элементов в массиве

ПРИМЕР 36:

Задание

Составить программу, которая заполняет целочисленный массив a[12] случайными числами из диапазона [–10, 10], находит наименьший элемент этого массива и меняет его местами с первым элементом. Преобразованный массив вывести на экран.

Пояснение

Для перестановки элементов вводим вспомогательную переменную s.

Если несколько элементов массива a[12] будут иметь одинаковое наименьшее значение, то для перестановки будет выбран первый из этих элементов.

Решение

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<time.h>

#define N 12

#define P printf

void main()

{ int a[N] , i, number, min, s; randomize();

P(“Исходный массив \n”);

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

{ a[i] = -10 + random(21);

P("%4d", a[i]);

}

min = a[0]; number = 0;

for (i = 1; i < N; i ++)

if(a[i] < min) {min = a[i]; number=i;

}

s = a[0]; a[0] = min; a[number] = s;

P(“\n Преобразованный массив:\n”);

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

P(“%4d”, a[i]);

P(“\n Нажмите любую клавишу”);

getch();

}

/*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/ /*8*/ /*9*/ /*10*/ /*11*/ /*12*/ /*13*/ /*14*/ /*15*/ /*16*/ /*17*/ /*18*/ /*19*/ /*20*/ /*21*/ /*22*/ /*23*/ /*24*/

      1. Сортировка массива

Под сортировкой понимается процесс перегруппировки одно-типных элементов с целью расположения их в некотором порядке, напри-мер, сортировка числового массива в порядке возрастания или убывания его элементов. Цель сортировки – облегчить поиск в массиве, его модифи-кацию. Сортировка ускоряет работу практически любого алгоритма, рабо-тающего с массивами данных. Одним из основных требований, предъяв-ляемых к алгоритмам сортировки, является экономичность использования памяти. Хорошую оценку эффективности алгоритмов сортировки дают число С – количество необходимых сравнений элементов и Р – количество перестановок элементов массива.

Разработано большое количество алгоритмов сортировки, однако не существует наилучшего алгоритма сортировки для всех случаев.

Пусть требуется отсортировать элементы числового массива в порядке возрастания его элементов.

Рассмотрим один из самых простых алгоритмов сортировки – сор-тировка методом пузырька (пузырьковая сортировка). Этот алгоритм ос-нован на сравнении двух соседних элементов и, возможно, их перестановке. После того, как будут просмотрены все элементы массива по направ-лению от его конца к началу (выполнен один проход) наименьший (самый “легкий”) элемент окажется первым (или наибольший элемент окажется последним при просмотре массива в обратном направлении). Этот процесс повторяется до тех пор пока все элементы массива не окажутся упоря-доченными. Нетрудно видеть, что максимальное число проходов равно n – 1, где n – количество элементов в массиве.

Оценим минимальное количество сравнений в пузырьковой сортировке. Если массив уже упорядочен, то для того, чтобы убедиться в этом, потребуется в течение одного прохода выполнить (n – 1) сравнений. Это и есть минимальное количество сравнений С.

Теперь оценим максимальное число сравнений в пузырьковой сортировке. На первом проходе число сравнений составляет (n – 1), на втором проходе (n – 2) и т.д. Таким образом, общее число сравнений не превосходит величины:

(n – 1) + (n – 2) + . . . +1 = nּ(n – 1)/2.

Аналогично можно оценить минимальное и максимальное число перестановок. В результате можно получить следующие оценки для числа сравнений С и числа перестановок Р:

Сmin = n – 1

Cmax = (n 2n)/2

Pmin = 0

Pсредн = 3ּ(n 2n)/4

Pmax = 3ּ(n 2n )/2

Ниже приводится текст программы, реализующей этот метод. Массив а[N] заполняется случайными числами.

ПРИМЕР 37:

Задание

Составить программу, которая заполняет целочисленный массив a[10] случайными числами из диапазона [–15, 15] и сортирует его в порядке возрастания элементов. Преобразованный массив вывести на экран.

Решение

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<time.h>

#define N 10

#define P printf

void main( )

{ int a[N] , i,j, s; randomize();

P(“Исходный массив\n”);

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

{ a[i]= -15 + random(31); P("%4d", a[i]);

}

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

for (j = N-1; j >i; j--)

if(a[j] < a[j-1]) {s = a[j-1]; a[j-1]=a[j]; a[j]=s;

}

P(“\n Преобразованный массив:\n”);

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

P(“%4d”, a[i]);

P(“\n Нажмите любую клавишу”);

getch();

}

/*1*/ /*2*/ /*3*/ /*4*/ /*5*/ /*6*/ /*7*/ /*8*/ /*9*/ /*10*/ /*11*//*12*//*13*//*14*//*15*//*16*//*17*//*18*//*19*//*20*//*21*//*22*/

Пояснение

В предложенном варианте реализации алгоритма пузырьковой сортировки возможна ситуация, когда массив уже отсортирован, но программа продолжает работать. Предложите улучшенный вариант программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]