Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2022, 20:07   #1
sasha917
Новичок
Джуниор
 
Регистрация: 20.01.2022
Сообщений: 1
По умолчанию Не получается правильно написать программу по массивам C++

Отсортируйте с применением метода слияния одномерный вещественный массив типа double, заданный случайными числами. Выведите на экран исходный и отсортированный массивы. Оцените его трудоемкость.

Код:
#include <iostream>
#include <time.h>
#include "Source.h"

//void BubbleSort(float massiv[], int* n);
void Merging_Sort(float massiv[], int* n);
int main()
{
    setlocale(LC_ALL, "rus");
    using namespace std;
    float massiv[10];
    int n = 0;
    srand(time(NULL));
    for (int i = 0; i < 10; i++)
    {
        massiv[i] = rand();
    }
    cout << "не сортированный массив: ";

    for (int i = 0; i < 10; i++)
    {
        cout << massiv[i] << " "; // выводим элементы массива
    }
    cout << endl;
    //BubbleSort(massiv, &n);
    cout << "Массив в отсортированном виде: ";

    for (int i = 0; i < 10; i++) {
        cout << massiv[i] << " "; // выводим элементы массива
    }
    cout << endl << "количество проходов = " << n << endl;
    return 0;
}
void Merging_Sort(float massiv[], int* n)
{
	int i, j, k, t, s, Fin1, Fin2, prohod = 0;

	//int*n = new massiv[];

	k = 1;
	while (k < n)
	{
		t = 0;
		s = 0;
		while (t + k < n)
		{
			Fin1 = t + k;
			Fin2 = (t + 2 * k < n ? t + 2 * k : n);
			i = t;
			j = Fin1;
			for (; i < Fin1 && j < Fin2; s++)
				if (x[i] < x[j])
				{
					tmp[s] = x[i];
					i++;
				}
				else
				{
					tmp[s] = x[j];
					j++;
				}
			for (; i < Fin1; i++, s++)
				tmp[s] = x[i];
			for (; j < Fin2; j++, s++)
				tmp[s] = x[j];
			t = Fin2;
		}
		prohod++;
		//cout<< "Проход " <<prohod<< ": "; out(x, n);
		k *= 2;
		for (s = 0; s < t; s++)
			x[s] = tmp[s];
	}
	prohod++;
	//cout<< "Проход " <<prohod<< ": "; out(x, n);
	delete[
Максимум что я смог сделать это отсортировать, сам массив применить не умею.

Последний раз редактировалось sasha917; 20.01.2022 в 20:10.
sasha917 вне форума Ответить с цитированием
Старый 21.01.2022, 11:00   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Код:
#include <iostream>
#include <time.h>
using namespace std;

void Merge(double *A, int first, int last)
{
int middle, start, final, j;

double *mas=new double[10];
middle=(first+last)/2; //вычисление среднего элемента
start=first; //начало левой части
final=middle+1; //начало правой части

for(j=first; j<=last; j++) //выполнять от начала до конца
    if((start<=middle) && ((final>last) || (A[start]<A[final])))
    {
        mas[j]=A[start];
        start++;
    }
    else
    {
        mas[j]=A[final];
        final++;
    }
//возвращение результата в список
for(j=first; j<=last; j++)
    A[j]=mas[j];
delete[]mas;
};

void MergeSort(double *A, int first, int last)
{
{
if (first<last)
{
MergeSort(A, first, (first+last)/2); //сортировка левой части
MergeSort(A, (first+last)/2+1, last); //сортировка правой части
Merge(A, first, last); //слияние двух частей
}
}
};

int main()
{
    setlocale(LC_ALL, "Rus");
    double Massiv[10];

    cout << "не сортированный массив:\n";
    for(int i = 0; i < 10; i++)
    {
        Massiv[i] = rand()%10;
        cout << Massiv[i] << " ";
    }
    cout << '\n';
    MergeSort(Massiv, 0, 9);

    cout << "\nотсортированный массив:\n";
    for(int i = 0; i < 10; i++)
        cout << Massiv[i] << " ";
    cout << '\n';
    return 0;
}
Cuprum5 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# не получается написать программу Кристофер Помощь студентам 1 17.12.2019 11:12
Написать программу по двумерным массивам Dimcha Паскаль, Turbo Pascal, PascalABC.NET 7 21.04.2017 00:53
Php, помогите правильно обратиться к массивам, чтоб правильно отобразить html KBO PHP 1 18.08.2016 23:49