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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2010, 20:06   #1
ts-alan
Форумчанин
 
Регистрация: 07.07.2010
Сообщений: 825
По умолчанию Пузырьковая сортировка

Пузырьбковую сортировку для одномерного массива я понемаю, но не могу понять как реализовать пузырьковую сортировку для двухмерного.Подскажите пожалуста.
ts-alan вне форума Ответить с цитированием
Старый 17.08.2010, 23:28   #2
__Demon__
Пользователь
 
Аватар для __Demon__
 
Регистрация: 13.08.2009
Сообщений: 37
По умолчанию

Например так:
Код:
template<class T, unsigned n>
void buble_sort(T array[][n], unsigned arraySize)
{
    for (unsigned pass = 1; pass < arraySize; pass++)
    {
        for (unsigned i = 0; i < arraySize - 1; i++)
        {
            if (array[i][0] > array[i + 1][0])
            {
                for (unsigned j = 0; j < n; j++)
                {
                    T t = array[i][j];
                    array[i][j] = array[i+1][j];
                    array[i+1][j] = t;
                }
            }
        }
    }
}
Эта функция сортирует массив array[arraySize][n] по 0-му столбцу.
__Demon__ вне форума Ответить с цитированием
Старый 18.08.2010, 13:32   #3
ts-alan
Форумчанин
 
Регистрация: 07.07.2010
Сообщений: 825
По умолчанию

а можно сделать что пузырьковая сортировка сортировала весь массив?Т.е чтобы все значения сравнивались.
ts-alan вне форума Ответить с цитированием
Старый 18.08.2010, 13:45   #4
__Demon__
Пользователь
 
Аватар для __Demon__
 
Регистрация: 13.08.2009
Сообщений: 37
По умолчанию

Так она и сортирует весь массив.
Цитата:
Т.е чтобы все значения сравнивались.
Не понял, уточните.
__Demon__ вне форума Ответить с цитированием
Старый 18.08.2010, 21:04   #5
ts-alan
Форумчанин
 
Регистрация: 07.07.2010
Сообщений: 825
По умолчанию

В смысле чтобы все значения возростали слево на право,и сверху вниз.
Например.
Исходный:
7 9 5
3 2 5
0 1 2

Отсортированный:
0 1 2
2 3 5
5 7 9
ts-alan вне форума Ответить с цитированием
Старый 18.08.2010, 23:30   #6
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Код:
const unsigned int n = 5;
	unsigned int i, j, k, l,t;
	int arr[n][n];
	
	for (i = 0; i < n; ++i)
		for (j = 0; j < n; ++j)
			arr[i][j] = rand() % 100;
	for (i = 0; i < n; ++i)
		for (j = 0; j < n; ++j) {
			for (k = i; k < n; ++k)
				for (l = j; l < n; ++l) {
					if (arr[i][j] > arr[k][l]) {
						t = arr[i][j];
						arr[i][j] = arr[k][l];
						arr[k][l] = t;
					}	
			}
		}
только массивы обычно сортирются по строкам.
include <Qt>
sever-42 вне форума Ответить с цитированием
Старый 20.08.2010, 02:29   #7
ts-alan
Форумчанин
 
Регистрация: 07.07.2010
Сообщений: 825
По умолчанию

sever-42 только это не пузырьковая сортировка,а сортировка методом выбора.Мне нужна пузырьковая)))
ts-alan вне форума Ответить с цитированием
Старый 20.08.2010, 09:50   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

2 ts-alan
В вашем случае:
1. вспоминаем (учим, гуглим) как хранятся в памяти двумерные массивы
2. берем пузырек для одномерного
3. с хитрой улыбкой превращаем двумерный в одномерный
4. сортируем
5. выводим полученное как двумерный
p51x вне форума Ответить с цитированием
Старый 20.08.2010, 15:00   #9
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Код:
 template <class Type> void sort_b(Type (*arr)[5],const unsigned int &n)
{
	unsigned int i, j;
	Type t;
	bool ctrl = true;
	
	while (ctrl) {
		ctrl = false;
		for (i = 0; i < n; ++i)
			for (j = 0; j < n; ++j) {
				if ((i != n - 1 || j != n - 1) && arr[i][j] > arr[i][j + 1]) {
					t = arr[i][j];
					arr[i][j] = arr[i][j + 1];
					arr[i][j + 1] = t;
					ctrl = true;
					cout << i * j + j << ' ' << arr[i][j] << endl;
				}
			}
	}	
}
include <Qt>
sever-42 вне форума Ответить с цитированием
Старый 20.08.2010, 21:15   #10
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Ляпнул не подумав.
Пузырьковая сортировка это сравнение двух соседних элементов если левый элемент в массиве меньший (сортировка по убыванию) сравнительно с правым, то они меняются местами, то биш всплывает. Для одномерного массива вроде как все логично. А вот для матрицы... помойму лишний гемо...ой, есть более простые методы сортировки. А какая постановка задачи?
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол

Последний раз редактировалось atenon; 20.08.2010 в 22:08.
atenon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Пузырьковая сортировка с использованием массива индексов Frame1992 Помощь студентам 0 28.04.2010 21:51
Пузырьковая сортировка (delphi) SNake Ice Помощь студентам 0 18.04.2010 14:41
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Пузырьковая сортировка массива HeadShooTeR Помощь студентам 3 18.10.2009 14:54
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32