Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИИ Программирование и основы алгоритмизации...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.5 Mб
Скачать

Позиционирование файлов

infile.seekg(n); // на n-й байт от начала файла

infile.seekg(n, ios::beg); // на n-й байт от начала файла

// (beg-по умолчанию)

infile.seekg(n, ios::cur); // на n байтов вперед от текущей позиции

infile.seekg(n, ios::end); // на n-й байт от конца файла

infile.seekg(0, ios::end); // на конец файла

outfile.seekp(……..); //для открытого на запись файла

long l=infile.tellg(); //возвращает текущую позицию указателя

//в файле, открытом на чтение

long l=outfile.tellp(); // возвращает текущую позицию указателя

//в файле, открытом на запись

Сортировки числовых массивов Принцип наименьших привилегий

Классические сортировки выполняются «на месте», т.е. на участке памяти, занимаемом исходным массивом. Примем, что массивы сортируются по возрастанию.

Принцип наименьших привилегий состоит в том, что всё, что не изменяется во время выполнения программы, объявляется неизменяемым, т.е. константным с использованием спецификатора const.

Обменная сортировка (SwapSort)

номер n=4 кол-во

прохода исходный массив действие получен массив сравнений

i=0 8 3 6 2 обмен 3 8 6 2 1

3 8 6 2 нет обмена 3 8 6 2 1

3 8 6 2 обмен 2 8 6 3 1

Результат прохода i=0: в позицию 0 помещен минимальный элемент при 3-х, т.е. (n-1)-0 сравнениях.

i=1 2 8 6 3 обмен 2 6 8 3 1

2 6 8 3 обмен 2 3 8 6 1

Второй по величине элемент помещен в позицию 1 при (n-1)-1 сравнениях.

i=2 2 3 8 6 обмен 2 3 6 8 1

Третий по величине элемент помещен в позицию 2 при (n-1)-2 сравнениях. Остался только один элемент с индексом 3, т.е. массив отсортирован. Сортировка потребовала 3-х, т.е. (n-1) проходов и фиксированного числа сравнений в каждом из них.

Вычислительная сложность обменной сортировки

Количество сравнений на i-м проходе: (n-1) - i. Количество сравнений на всех (n-1) проходах:

Наилучший случай соответствует уже отсортированному исходному массиву, когда обменов нет. Наихудший случай соответствует пересортировке массива, когда количество обменов максимально и совпадает с числом сравнений.

Алгоритм функции обменной сортировки массива a длиной n

Алгоритм функции обменов

Алгоритм функции вывода массива

//-------------------------------------------------------------------------

#include <iostream.h>

#include <iomanip.h>

void SwapSort(int[], const int, int&, int&);

void Swap(int&, int&);

void PrintMass(const int[], const int);

void main()

{

int sr, obm;

//Формирование массива x длиной n

………………………………………….

cout<<setw(30)<<”Исходный массив\n”;

PrintMass(x, n);

SwapSort(x, n, sr, obm);

cout<<setw(30)<<”Получен массив\n”;

PrintMass(x, n);

cout<<”Кол-во сравнений: “<<sr<<”и обменов: “<<obm<<endl;

getch();

}

//---------------------------------------------------------------------------

void SwapSort(int a[], const int n, int& sr, int& obm)

{

sr=obm=0;

int i, j;

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

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

{

if(a[i]>a[j]) {swap(a[i], a[j]); obm++;}

sr++;

}

}

//---------------------------------------------------------------------------

void Swap(int& x, int& y)

{ int z=x; x=y; y=z; }

//---------------------------------------------------------------------------

void PrintMass(const int a[], const int n)

{

for(int i=0; i<n; i++)

cout<<setw(4)<<a[i];

cout<<endl;

}

//----------------------------------------------------------------------------