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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2012, 18:39   #1
СтёпышЪ
Пользователь
 
Аватар для СтёпышЪ
 
Регистрация: 20.04.2012
Сообщений: 16
По умолчанию Процедура сортировки слиянием(Паскаль, C++)

здравствуйте!
Нужно написать код сортировки написанный на паскале.
на языке С++.

Пример когда на паскале
Код:
procedure sort_slij(var a:array of integer; p,r:integer);
	var q:integer;
	d:array[1..r]of integer;
	{в процедуру слияния передаем начало и конец левого массива, конец правого}


		procedure sl(pp,qq,rr:integer);
		27
		var t,i,j,k:integer;
		begin
			i:=pp;j:=qq+1;t:=1; {передача значений индексам массивов }
			{i – индекс левого массива}
			{j – индекс правого массива}
			{t – индекс нового массива}
			while (i<=qq) and (j<=rr) do
				begin
					if a[i]<a[j] then 
						begin
						d[t]:=a[i];
						inc(i);
						end
					else 
						begin
						d[t]:=a[j];
						inc(j);
						end;
					inc(t);
				end;

			{Запись оставшихся элементов в новый массив}
			while i<=qq do begin d[t]:=a[i];inc(i);inc(t) end;
			while j<=rr do begin d[t]:=a[j];inc(j);inc(t) end;
			
			{копирование элементов массива d в исходный массив а}
			for k:=1 to t-1 do a[pp+k-1]:=d[k];
		end;
	
	{основная программа сортировки слиянием}
	begin
		if p<r then 
			begin
				q:=(p+r) div 2;{деление пополам}
				sort_slij(A,p,q); {вызов процедуры сортировки для левой половины}
				sort_slij(A,q+1,r); {вызов для правой половины}
				sl(p,q,r); {вызов процедуры слияния}
			end;
	end;



Вот мои так сказать попытки...


Код:
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
using namespace std;

//в процедуру слияния передаем начало и конец левого массива, конец правого
int Sl(int pp, int qq, int rr)
{
		int t,i,j,k;

		//передача значений индексам массивов
		i=pp;
		j=qq+1;
		t=1;
		//i – индекс левого массива
		//j – индекс правого массива
		//t – индекс нового массива
		while(i<=qq && j<=rr)
		{
			if (a[i]<a[j])
			{
				d[t]=a[i];
				i++;
			}
			else 
			{
				d[t]=a[j];
				j++;
			}
			t++;
		}
		//Запись оставшихся элементов в новый массив
		while (i<=qq)
		{
			d[t]=a[i];
			i++;
			t++;
		}
		while (j<=rr)
		{
			d[t]=a[i];
			j++;
			t++;
		}
		//копирование элементов массива d в исходный массив а
		for(k=0;k<t-1;k++) a[pp+k-1]=d[k];
}

int sort_slij(int a[], int p, int r)
{
	int q;
	int *d=new int [r];

	if (p<r)
	{
		q=(p+r)/2;//деление пополам
		sort_slij(a,p,q);//вызов процедуры сортировки для левой половины
		sort_slij(a,q+1,r);//вызов для правой половины
		Sl(p,q,r);//вызов процедуры слияния
	}
	
}
СтёпышЪ вне форума Ответить с цитированием
Старый 20.04.2012, 20:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
{основная программа сортировки слиянием}
Она что рекурсивна???
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.04.2012, 21:12   #3
СтёпышЪ
Пользователь
 
Аватар для СтёпышЪ
 
Регистрация: 20.04.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Она что рекурсивна???
да она самая

это цитата из методички по паскалю
Цитата:
Процедура сортировки слиянием рекурсивно делит массив на подмассивы до тех пор, пока каждый подмассив не будет содержать только 26
один элемент, а затем вызывается процедура слияния двух подмассивов, в которую передаются левый и правый подмассивы.
СтёпышЪ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal - Сортировки прямым и естественным слиянием Lesta Помощь студентам 0 14.03.2012 19:52
Процедура сортировки массива по возрастанию amidatong Паскаль, Turbo Pascal, PascalABC.NET 2 21.03.2011 21:04
Процедура сортировки с подсчётом перестановок и сравнений (Паскаль) Паскалька^^ Помощь студентам 0 17.10.2010 23:35
Метод сортировки естественным слиянием AnDrOiD73 Общие вопросы Delphi 0 24.06.2010 23:11
Паскаль. процедура сортировки числового массива методом выбора Оксаночка:) Помощь студентам 2 24.08.2009 11:41