search

Рекомендация: прочитайте задачу! Выполните ее и сравните полученный результат с картинкой CMD

Если вы полностью уверены что не можете осилить эту задачу, советую вам просмотреть код и полностью в нем разобраться! Протестировать все в отладчике!

Написать многофайловую программу, в которой реализованы следующие возможности:
 Генерация одномерного массива вещественных чисел (количество элементов и границы диапазона выступают как параметры).
 Вывод массива на экран одной строкой.
 Клонирование массива.
 Сортировка массива выбором.
 «Пузырьковая» сортировка массива.
 Сортировка массива вставками.
 Быстрая сортировка Хоара
Каждая задача в программе реализована отдельной процедурой или функцией.
Функции, реализующие сортировки, вынести в отдельный файл (все в один или каждую по отдельности).
При выполнении сортировки провести замер времени выполнения программы. Продемонстрировать работу кода путем генерации массива и его сортировки различными методами.
Внимание: сортировку необходимо сделать именно для первоначально сгенерированного массива.

#pragma once
#include <iostream> 
#include <ctime>
using namespace std; 
#define STOP_Program system("PAUSE>>VOID"); 
void Array_Rand(int * arr, int size, int max, int min);
void Print_Array(int * arr, int size);
void Cloning_Array(int * arr, int size);
void Sort_Boobble_Array(int * arr, int size);
void Insert_Sort_Array(int * arr, int size);
void Selection_Sort_Array(int * arr, int size);
void Quick_Sort_Array(int * arr, int length);
void Backup_Array(int * arr, int * BackupArr, int length);	

//Functions.cpp	
#include "H.h"

void Backup_Array(int * arr, int * CopyArr, int length) { // Backup arrays
	for (int i = 0; i < length; i++)
		arr[i] = CopyArr[i];
}
void Array_Rand(int * arr, int size, int max, int min) { // Fill an array with random numbers with given ranges
	srand(time(NULL));
	for (int i = 0; i < size; i++)
		arr[i] = min + rand() % (max - min);
}
void Print_Array(int * arr, int size) { // Displaying an array on the screen
	for (int i = 0; i < size; i++) {
		cout << arr[i] << "\t";
	}
}
void Cloning_Array(int * arr, int size) { //Elements of the array are written to the array in reverse order
	int tmp = 0, counter = 0;
	for (int j = (size - 1) - counter; j > counter; j--) {
		tmp = arr[counter];
		arr[counter] = arr[j];
		arr[j] = tmp;
		counter++;
	}
}	

//#include "Functions_Sort.cpp"	
#include "H.h"

void Sort_Boobble_Array(int * arr, int size) { // boobble sort
	int tmp = 0;
	for (int i = 0; i < size; i++) {
		for (int j = size - 1; j > i; j--) {
			if (arr[j - 1] > arr[j]) { // Rearrange elements
				tmp = arr[j - 1];
				arr[j - 1] = arr[j];
				arr[j] = tmp;
			}
		}
	}
}
void Insert_Sort_Array(int * arr, int size) { // insert sort
	int tmp = 0;
	for (int i = 1; i < size; i++) {
		for (int j = i; j > 0 && arr[j] < arr[j - 1]; j--) {
			tmp = arr[j - 1]; // Rearrange elements
			arr[j - 1] = arr[j];
			arr[j] = tmp;
		}
	}
}
void Selection_Sort_Array(int * arr, int size) { //Selection Sort
	int i, j, min;
	int tmp;
	for (i = 0; i < size; i++) {
		min = i;
		tmp = arr[i];
		for (j = i + 1; j < size; j++) {
			if (arr[j] < tmp) {
				min = j; // index MIN 
				tmp = arr[j]; // Rearrange elements
			}
		}
		arr[min] = arr[i];
		arr[i] = tmp; //MIN = Array[i]
	}
}
void Quick_Sort_Array(int * arr, int length) { // Quick Sort
	int i = 0, j = length; // i = LEFT j = RIGHT
	int tmp = 0, Median = 0; // Median = supporting element
	Median = arr[(i + j / 2)]; //supporting element
	do {
		while (arr[i] < Median) i++;
		while (arr[j] > Median) j--;
		if (i <= j) { // Rearrange elements
			tmp = arr[i];
			arr[i] = arr[j];
			arr[j] = tmp;
			i++;
			j--;
		}
	} while (i <= j);
	// recursive calls, if there is, what to sort
	if (j > 0) Quick_Sort_Array(arr, j);
	if (length > i) Quick_Sort_Array(arr + i, length - i);
}	

#include "H.h"
void main() {
	clock_t start, end;
	char Start_Program = 0;
	double seconds = 0;
	int size = 0, max = 0, min = 0;
	int * PtrArr;
	int * Copy_Array;

	do {
		//----------------------------------------------------------------------------------
		cout << "===> Beta version 0.0.1" << endl;
		cout << "===> All the errors send us on Viber" << endl;
		cout << "The program demonstrates the time of sorting and cloning the array!\n"
			<< "Enter the function parameters:\n"
			<< "1.Size\n"
			<< "2.MAX Element\n"
			<< "3.MIN Element\n" << endl;
		cin >> size >> max >> min;

			PtrArr = new int[size]();
			Copy_Array = new int[size](); // Array Backup
//----------------------------------------------------------------------------------
			Array_Rand(PtrArr, size, max, min);
			for (int i = 0; i < size; i++) { Copy_Array[i] = PtrArr[i]; } // Copy Array
			Print_Array(PtrArr, size);
			cout << endl;
			cout << "<<< Cloning >>>" << endl;
			Cloning_Array(PtrArr, size);
			Print_Array(PtrArr, size);
			cout << endl;
			Backup_Array(PtrArr, Copy_Array, size); // Retrieve the original array 
//----------------------------------------------------------------------------------
			cout << "<<< Selections sort >>>" << endl;
			Print_Array(PtrArr, size);
			cout << endl;
			start = clock();
			Selection_Sort_Array(PtrArr, size);
			end = clock();
			Print_Array(PtrArr, size);
			seconds = (double)(end - start) / CLOCKS_PER_SEC;
			cout << endl;
			cout << "***(Selections) Time = " << seconds << endl;
			Backup_Array(PtrArr, Copy_Array, size); // Retrieve the original array 
//----------------------------------------------------------------------------------
			seconds = 0;
			cout << "<<< Boobble sort >>>" << endl;
			Print_Array(PtrArr, size);
			cout << endl;
			Backup_Array(Copy_Array, PtrArr, size);
			start = clock();
			Sort_Boobble_Array(PtrArr, size);
			end = clock();
			Print_Array(PtrArr, size);
			seconds = (double)(end - start) / CLOCKS_PER_SEC;
			cout << endl;
			cout << "***(Boobble)Time = " << seconds << endl;
			Backup_Array(PtrArr, Copy_Array, size); // Retrieve the original array 
//----------------------------------------------------------------------------------
			seconds = 0;
			cout << "<<< Insert sort >>>" << endl;
			Print_Array(PtrArr, size);
			cout << endl;
			Backup_Array(Copy_Array, PtrArr, size);
			start = clock();
			Insert_Sort_Array(PtrArr, size);
			end = clock();
			Print_Array(PtrArr, size);
			seconds = (double)(end - start) / CLOCKS_PER_SEC;
			cout << endl;
			cout << "***(Insert)Time = " << seconds << endl;
			Backup_Array(PtrArr, Copy_Array, size); // Retrieve the original array 
//----------------------------------------------------------------------------------
			seconds = 0;
			cout << "<<< Quick sort >>>" << endl;
			Print_Array(PtrArr, size);
			cout << endl;
			Backup_Array(Copy_Array, PtrArr, size);
			start = clock();
			Quick_Sort_Array(PtrArr, size - 1);
			end = clock();
			Print_Array(PtrArr, size);
			seconds = (double)(end - start) / CLOCKS_PER_SEC;
			cout << endl;
			cout << "***(Quick sort)Time = " << seconds << endl;
			Backup_Array(PtrArr, Copy_Array, size); // Retrieve the original array 
//---------------------------------------------------------------------------------- 
			cout << endl << endl;
			cout << "Go (y)" << endl;
			cin >> Start_Program;
			delete[] PtrArr;
			delete[] Copy_Array;
		} while (Start_Program == 'y');
//----------------------------------------------------------------------------------
		STOP_Program // ***Windows Console = pause***
}	

array