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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2016, 16:53   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию Сортировка слиянием си

Добрый день. Помогите пожалуйста сделать сортировку слиянием двумерного массива символов. Сортировку обменом сделала,а на слиянии запуталась.Спасибо

Код:

void Merge(char A[][MAXLENGTH], int first, int last)
{
	int middle, start, final, j,k;
	char *mas=new char[100];
	middle=(first+last)/2; //вычисление среднего элемента
	start=first; //начало левой части
	final=middle+1; //начало правой части
	 
	for(j=first; j<=last; j++) //выполнять от начала до конца
 for (k = j + 1; A[j][k] != '\0'; k++) 
	if ((start<=middle) && ((final>last) || (A[start][k]<A[final][k])))
	{
	mas[j]=A[start][k];
	start++;
	}
	else
	{
	mas[j]=A[final][k];
	final++;
	}
//возвращение результата в список
	for (j=first; j<=last; j++)
		for (k = j + 1;A[j][k] != '\0'; k++) 
		A[j][k]=mas[j];
	delete[]mas;
}
//рекурсивная процедура сортировки
void MergeSort(char A[][MAXLENGTH], int first, int last)
{
	// for (int i = 0; i < SIZE; i++) 
	{if (first<last)
	{
		MergeSort(A, first, (first+last)/2); //сортировка левой части
		MergeSort(A, (first+last)/2+1, last); //сортировка правой части
		Merge(A, first, last); //слияние двух частей
	}
	 }

	  for (int i = 0; i < SIZE; i++)
   {
	puts(A[i]);

	}
}

Последний раз редактировалось Вероника99; 17.11.2016 в 20:04.
Вероника99 вне форума Ответить с цитированием
Старый 17.11.2016, 20:24   #2
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Подскажите пожалуйста,очень надо(
Вероника99 вне форума Ответить с цитированием
Старый 18.11.2016, 00:52   #3
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

2д массив вообще фиг знает как слиянием сортировать т. к. не вяжется оно по смыслу
Если совсем упарываться, то:
1) нужно делить не по кол-ву элементов, а по строкам\столбцам (по строкам немного проще след. шаг)
2) сортировать значения внутри строки\столбца
3) выполнить слияние

Фактически, сортировка слиянием 2д-массива - это сортировка слиянием его строк\столбцов + обычная сортировка 1д-массива

Можно поступить проще, НО есть шанс огрести от препода) суть в том, что если 2д массив был создан одним malloc, то он эквивалентен 1д-массиву M*N элементов.... можно взять адрес arr[0][0] и применить обычную сортировку слиянием (отсортирует по строкам только, по столбцам не сможет практически никак)
GreenWizard вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка слиянием Никита757 Паскаль, Turbo Pascal, PascalABC.NET 0 30.11.2015 19:46
Сортировка слиянием NinjaNoob Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 29.12.2012 06:24
Сортировка слиянием. С++ Noizik Помощь студентам 1 09.05.2012 14:23
СОРТИРОВКА СЛИЯНИЕМ spawn969 Помощь студентам 5 12.05.2011 01:03
Сортировка слиянием maxflint Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 05.12.2009 20:41