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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2019, 14:00   #1
LOkeron
Пользователь
 
Аватар для LOkeron
 
Регистрация: 18.11.2018
Сообщений: 26
По умолчанию Сортировка перемешиванием С++

Есть код
Код:
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <vector>
using namespace std;

void OB(int a, int b)
{
	int L = a;
	a = b;
	b = L;
}




// Функция Шейкер-сортировки
void shekerSort(int *mass, int count)
{
	int left = 0, right = count - 1 ; // левая и правая границы сортируемой области массива
	int flag = 1;  // флаг наличия перемещений
	// Выполнение цикла пока левая граница не сомкнётся с правой
	// или пока в массиве имеются перемещения
	while ((left < right) && flag > 0)
	{
		flag = 0;
		for (int i = left; i < right; i++)  //двигаемся слева направо
		{
			if (mass[i] > mass[i + 1]) // если следующий элемент меньше текущего,
			{             // меняем их местами
				OB(mass[i + 1], mass[i]);
				flag = 1;      // перемещения в этом цикле были
			}
		}
		right--; // сдвигаем правую границу на предыдущий элемент
		for (int i = right; i > left; i--)  //двигаемся справа налево
		{
			if (mass[i - 1] > mass[i]) // если предыдущий элемент больше текущего,
			{            // меняем их местами
				OB(mass[i - 1], mass[i]);
				flag = 1;    // перемещения в этом цикле были
			}
		}
		left++; // сдвигаем левую границу на следующий элемент
	}
} 

int main()
{
	ifstream in("arrive.txt");
	ofstream out("res.txt");
	const int n = 5;
	int ary[n][n];
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
		{
			in >> ary[i][j];
		}
	for (int k = 1; k < 2 * n - 2; k++, cout<<endl)
	{
		vector<int>vs; 
		for (int i = 0; i < n; i++)
			if (k - i < n && k - i >= 0)
				vs.push_back(ary[i][k - i]);
		int *mas = new int[vs.size()];
		for (int i = 0; i < vs.size(); i++)
		{
			mas[i] = vs[i]; 
		}
		shekerSort(mas, vs.size());
		int l = 0; 
		for (int i = 0; i < n; i++)
			if(k-i<n && k-i>=0)
			{
				ary[i][k-i] = mas[l]; l++; 
			}
			vs.clear();
	}
	 for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
		{
			out << ary[i][j] << " ";
			if (j == n-1)
			{
				out << endl;
			}
		}
	return 0;
}
По идеи он должен отсортировать элементы двумерного массива по побочной диагонали и линиям, параллельной ей, но не сортирует вовсе. Может кто подскажет в чем ошибка?
LOkeron вне форума Ответить с цитированием
Старый 09.04.2019, 14:05   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,710
По умолчанию

В том, что вы продолжаете игнорировать основы языка. Есть функция swap, которая обменивает элементы. Есть ваша, которая это не делает... Можете помедетировать между ними.
p51x вне форума Ответить с цитированием
Старый 09.04.2019, 14:06   #3
LOkeron
Пользователь
 
Аватар для LOkeron
 
Регистрация: 18.11.2018
Сообщений: 26
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
В том, что вы продолжаете игнорировать основы языка. Есть функция swap, которая обменивает элементы. Есть ваша, которая это не делает... Можете помедетировать между ними.
Я знаю про эту функцию, но она этим заниматься не хочет, пришлось написать вот эту, но проблема не в этом, я уверен
LOkeron вне форума Ответить с цитированием
Старый 09.04.2019, 14:08   #4
LOkeron
Пользователь
 
Аватар для LOkeron
 
Регистрация: 18.11.2018
Сообщений: 26
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
В том, что вы продолжаете игнорировать основы языка. Есть функция swap, которая обменивает элементы. Есть ваша, которая это не делает... Можете помедетировать между ними.
вы были правы. Спасибо
LOkeron вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Блочная сортировка и сортировка вставками на C++ vishe_mastila Фриланс 3 23.03.2019 00:15
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32