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

Архив WinRAR / semestrovaya

.cpp
Скачиваний:
9
Добавлен:
20.04.2015
Размер:
3.92 Кб
Скачать
#include "iostream"
#include "time.h"
#include "clocale"
#include "conio.h"
#include "stdlib.h"
#include "math.h"
#include "stdio.h"

using namespace std;

unsigned long long int sr=0, pe=0;

void insert_sort(int A[], int size);
void bubble_sort(int A[], int size);

void main()
{
	setlocale(0, "rus");
	int key, key2, size=20, j;
	int *A; bool ex=0, ex2=0;
	FILE *f;
		if((f = fopen("output.txt", "a")) == NULL)
		{
			cout << "Ошибка создания/открытия файла!" << endl;
			return;
		}
	cout << "\t\t\t    Семестровая работа N1\n" << endl;
//for(;;){
	//ex=0;
	//cout << endl;
	//cout << "	|[1] Bubble sort" << endl;
	//cout << "	|[2] Insert sort" << endl;
	//cout << "	|[0] Выход" << endl;
	//cout << "	| -> ";
	//cin >> key;
	//if (key == 0) return;
	//cout << endl;
	//cout << "	|[1] Почти упорядоченный массив" << endl;
	//cout << "	|[2] Обратный масссив" << endl;
	//cout << "	|[3] Случайный массив" << endl;
	//cout << "	| -> ";
	//cin >> key2;
	//cout << endl;
cout << "Чтобы начать нажмите любую клавишу . . . "; getch();
cout << "\nПожалуйста, подождите..." << endl;
cout << endl;
	for(key2 = 1; key2 <= 3; key2++)
	{ex=0;
		for(key = 1; key <=2; key++)
		{ex2=0;

	for(size = 625; size <= 80000; size*=2)
	{
		A = new int [size];
		switch(key2)
		{
		case 1:
			if(ex==0)cout << "Выполняется: Сортировка для почти упорядоченного массива\n" << endl;
			if(ex==0)fprintf(f, "Сортировка для почти упорядоченного массива\n\n");
			ex=1;
			for (int i = 0; i < size/4; i++) A[i] = size-i;
			for (int i = size/4; i < size; i++) A[i] = i;
		break;

		case 2:
			if(ex==0)cout << "\n-----------------------------------------------------\n\nВыполняется: Сортировка для обратного массива\n" << endl;
			if(ex==0)fprintf(f, "\n-----------------------------------------------------\n\nСортировка для обратного массива\n\n");
			ex=1;
			j = size-1;
			for(int i = 0; i < size; i++)
			{
				A[i] = j;
				j--;
			}
		break;

		case 3:
			if(ex==0)cout << "\n-----------------------------------------------------\n\nВыполняется: Сортировка для случайного массива\n" << endl;
			if(ex==0)fprintf(f, "\n-----------------------------------------------------\n\nСортировка для случайного массива\n\n");
			ex=1;
			for(int i = 0; i < size; i++)
				A[i] = rand() %50;
		break;
		}
time_t   start, finish;
long long int   elapsed_time;
time( &start );
		switch(key)
		{
		case 1:
			bubble_sort(A, size);
			if(ex2==0)cout << "\tBubble Sort:" << endl;
			if(ex2==0)fprintf(f, "Bubble Sort(Сортировка методом пузырька)\n");
			if(ex2==0)fprintf(f, "Кол-во элементов  Сравнений      Перестановок\n");
			ex2=1;
		break;

		case 2:
			insert_sort(A, size);
			if(ex2==0)cout << "\tInsert sort:" << endl;
			if(ex2==0)fprintf(f, "Insert sort(Сортировка вставками)\n");
			if(ex2==0)fprintf(f, "Кол-во элементов  Сравнений      Перестановок\n");
			ex2=1;
		break;
		}
time(&finish);
elapsed_time = finish - start;
	delete A;
	fprintf(f, "%11d\t%11lld\t%11lld\t%d\n", size, sr, pe, elapsed_time);
	cout << "Кол-во эл-в: " << size << ", cравнений: " << sr << ", пер-к: " << pe << ", время: " << elapsed_time << endl;
	if(size==80000)fprintf(f,"\n");
	if(size==80000)cout << endl;
	}
}
}
	cout << "Для продолжения нажмите любую клавишу . . . ";
	getch();
	return;
}

void insert_sort(int *a, int size)
{
int x, i, j;
sr = pe = 0;
	for (i = 0; i < size; i++)
	{
		x = a[i];
			for (j = i-1; j>=0 && a[j] > x; j--)
			{
				sr++;
				a[j+1] = a[j];
			}
		pe++;
		a[j+1] = x;
	}
}

void bubble_sort(int *a, int size)
{
	bool ex=0;
	int tmp, n=0;
	sr = pe = 0;
	size--;
	while(ex==0)
	{
		ex=1;
		for(int i = 0; i < size; i++)
		{
			sr++;
			if(a[i] > a[i+1])
			{
				tmp = a[i];
				a[i] = a[i+1];
				a[i+1] = tmp;
				ex = 0;
				pe++;
				n = i;
			}
		}
		size = n;
	}
}
Соседние файлы в папке Архив WinRAR