Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №1 Вариант 2

.doc
Скачиваний:
22
Добавлен:
20.06.2014
Размер:
424.96 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ

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

по дисциплине

«Технология программирования»

Студент

Бутаков В.В.

подпись, дата

фамилия, инициалы

Группа

АС-09

Принял

Домашнев П.А.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2010

  1. Задание

Осуществить программную реализацию сортировки информации заданного вида сбалансированным N-ленточным слиянием (в оперативной памяти), используя выбранные алгоритм внутренней сортировки и формат исходных данных.

Вариант 2

Ключ – int

Запись – только ключ

Метод внутренней сортировки – Метод Шелла

  1. Блок-схема программы

  1. Листинг программы

#include<stdio.h>

#include<windows.h>

#include<conio.h>

#include<math.h>

#include<string.h>

void shell(int *items, int count)

{

register int i, j, x, gap;

gap=(int)(count/2);

while(gap>0)

{

for(i=gap;i<count;i++)

{

x=items[i];

for(j=i-gap; (x < items[j]) && (j >= 0); j=j-gap)

{

items[j+gap] = items[j];

}

items[j+gap] = x;

}

gap=(int)(gap/2);

}

}

void main()

{

SYSTEMTIME tim;

GetSystemTime(&tim);

srand(tim.wMilliseconds);

int count,k=0,*source,**a,*b,*stek;

printf("Puts count elements:\t");

scanf("%d",&count);

int N=(int)ceil(sqrt((float)count));

source=(int*)malloc(sizeof(int)*count);

a=(int**)malloc(sizeof(int*)*N);

b=(int*)malloc(sizeof(int)*N);

stek=(int*)malloc(sizeof(int)*N);

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

{

a[i]=(int*)malloc(sizeof(int));

b[i]=0;

}

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

{

k=i%N;

source[i]=rand();

a[k]=(int*)realloc(a[k],sizeof(int)*(++b[k]));

a[k][b[k]-1]=source[i];

printf("%d ",source[i]);

}

printf("\n\n");

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

{

shell(a[i],b[i]);

for(int j=0;j<b[i];j++)printf("%d\t",a[i][j]);

printf("\n");

}

printf("\n");

for(int i=count-1;i>-1;i--)

{

k=0;

if(b[0]>0)stek[0]=a[0][b[0]-1];

else

{

int j=0;

while((b[j]<=0)&&(j<N))j++;

j--;

stek[0]=a[j][b[j]-1];

b[0]=b[j];

b[j]=0;

}

for(int j=1;j<N;j++)

{

if(b[j]<=0)continue;

stek[j]=a[j][b[j]-1];

if(stek[j]>stek[0])

{

stek[0]=stek[j];

k=j;

}

}

source[i]=stek[0];

b[k]--;

}

for(int i=0;i<count;i++)printf("%d ",source[i]);

free(source);

getch();

}

  1. Контрольный пример