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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2009, 08:25   #1
dark_shining
 
Регистрация: 30.09.2009
Сообщений: 4
По умолчанию Нужна помощь с упорядочиванием!

Здравствуйте! Сейчас пишу лабу про упорядочивание массивов(слиянием).
Данный алгоритм совсем не понятен, пожалуйста помогите в написании.

Задание: Имеется два массива, один упорядочен по убыванию другой по возрастанию. Из этих массивов организовать третий, слиянием элементов, упорядоченный по убыванию.

Мой код:
Код:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>

#define n 200

 void main(){
	clrscr();

	double mas1[n/2];
	double mas2[n/2];
	double endmas[n];
	double t;
	int x,i,j;
	randomize();

	cout << "Decreased array: " << endl;

	mas1[0]=1000;
	mas2[0]=0;

	for (i=1; i<n/2; i++){
		x=random(20);
		mas1[i]=mas1[i-1]-x;
		cout << mas1[i] << " ";          }


	cout << endl << "Increased array: " << endl;

	for (i=1; i<n/2; i++){
		x=random(20);
		mas2[i]=mas2[i-1]+x;
		cout << mas2[i] << " ";      }


	cout<<endl <<"End mas: "<< endl;

	for (i=0; i<n; i++){
	    if (i<n/2){
		endmas[i]=mas1[i];
			}
	    if (i>=n/2 && i<n){
		endmas[i]=mas2[i-100];
				  }
	    cout << endmas[i] << " ";
			      }

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

			if(endmas[j]<endmas[j+1]){
			  t=endmas[j];
			  endmas[j]=endmas[j+1];
			  endmas[j+1]=t;}
			}}


	     cout<< endl <<"Sorted endmas: "<<endl;
	     for(i=0;i<n;i++){
		 cout<<endmas[i]<<" ";

}}


Препод сказал что неверно и надо использовать сортировку слиянием. Прочитал в разных источниках про этот метод,ничего не понял. Подскажите как написать.

Последний раз редактировалось Stilet; 30.09.2009 в 08:56.
dark_shining вне форума Ответить с цитированием
Старый 30.09.2009, 11:32   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

ну давай на примере. вот у тебя 2 массива:
Код:
50    1
40    2
30    3
20    4
10    5
согласно твоему заданию, один сортирован по возрастанию, другой - по убыванию. Делаешь из этих массивов пары элементов. По первому идешь с начала, по другому - с конца:
Код:
1 10 | 2 20 | 3 30 | 4 40 | 5 50
дальше объединяешь пары, одну с начала, одну с конца:
Код:
1 5 10 50 | 2 4 20 40 | 3 30
тут у тебя получился остаток (3 30), его можно слить в самом конце (ну я так делал, когда реализовывал этот алгоритм)
имеем:
Код:
1 2 4 5 10 20 40 50 | 3 30
ну и сливаешь остаток с результирующей последовательностью.

пары не обязательно брать начало-конец. просто когда я делал это задание, у меня был дек, и это был удобный способ. ты можешь сливать первую пару со второй, третью с четвертой и тд. основная идея - создать пары (в твоем задании это просто, ибо массивы у тебя изначально отсортированы)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12
Нужна помощь) Djem1991 Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 29.06.2009 16:14