Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.01.2010, 20:08
xpymbl4 вне форума Посмотреть профиль Отправить личное сообщение для xpymbl4 Найти все сообщения от xpymbl4
  № 1  
Ответить с цитированием
xpymbl4
 
Аватар для xpymbl4

Регистрация: Jul 2008
Адрес: Smolensk
Сообщений: 124
Отправить сообщение для xpymbl4 с помощью ICQ Отправить сообщение для xpymbl4 с помощью Skype™
Cool Сортировка массивов

Ишется алгоритм для ручной сортировки массивов.
Что имеется:
Код AS3:
var a1:Array = [12, 3, 1, 2, 2]; /*массив числовых данных типа int 
неопределенной длины, с разными/одинаковыми, неупорядоченными значениями*/
var a2:Array = ['a', 'b', 'c', 'd', 'e'] /*массив каких-либо объектов,
в данном случае для удобства и наглядности они представлены в виде
строковых данных, причем a1.length == a2.length;*/;
Необходимо получить массивы:
Код AS3:
a1 = [1, 2, 2, 3, 12]; /* массив отсортирован по возрастанию*/
a2 = ['c', 'd', 'e', 'b', 'a']; /*данные упорядочены таким образом,
что как и изначально, элемент массива a2 с индексом i
соответствует элементу массива a1 с индексом i*/
Как бы Вы это реализовали правильно и красиво?
__________________
круглое тащим, квадратное катим

Старый 14.01.2010, 20:15
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Объединить числа из первого массива с соответствующими объектами из второго в одном объекте { index: 12, value: 'a' }, и сортировать по полю index.

Старый 14.01.2010, 20:24
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
я бы добавил колбек в sort() первого массива и в нем бы сортировал второй... ну, скажем для коротких массивов это может быть не актуально, но для длинных - это ж нужно будет добавить целый массив фейк объектов которые нужны только для сортировки...

Код AS3:
//              1,    2,   2,   3,   12
var a1:Array = [12,   3,   1,   2,   2];
//              c,    e,   a,   d,   b
var a2:Array = ["a", "b", "c", "d", "e"];
 
function numSort(a:int, b:int):int
{
	var index:int;
	var s:String;
	if (a > b)
	{
		index = a1.indexOf(a);
		s = a2.splice(index, 1)[0];
		a2.push(s);
		return 1;
	}
	else if (a < b)
	{
		return -1;
	}
	return 0;
}
a1.sort(numSort);
trace(a2, a1);
Вроде так, не?

EDIT:
Ой не... так не получится... сейчас посмотрел, там пары в каком-то странном порядке передаются и массив сам во время сортировки не меняется... вобщем, сорри, тогда только совй сот писать
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 14.01.2010 в 21:10.
Старый 14.01.2010, 23:16
Ixanezis вне форума Посмотреть профиль Отправить личное сообщение для Ixanezis Найти все сообщения от Ixanezis
  № 4  
Ответить с цитированием
Ixanezis

Регистрация: Sep 2009
Сообщений: 18
Используйте любой стандартный алгоритм сортировки.
К примеру есть у вас QuickSort
(Если не знаете, это такой быстрый алгоритм для сортировки (Сложность N*log N))
Взял на С++ что писал когда-то:

Код:
Quick(int b, int e)
{
	int i=b, j=e;
	int X = ar[(b+e) / 2]; // Здесь надо выбрать любой элемент массива.
	while (i<=j) {
		while (ar[i] < X) i++;
		while (ar[j] > X) j--;
		if (i<=j) {
			int tmp = ar[i];
			ar[i] = ar[j];
			ar[j] = tmp;

			i++;
			j--;
		}
	}
	if (i<e) Quick(i, e);
	if (b<j) Quick(b, j);
}
Этот алгоритм отсортирует массив ar, начиная с индекса b до e включительно
То есть вызывать функцию надо так:
Quick(0, a1.length-1); // Если взять ваш пример

Но вам нужно, насколько я понимаю, чтобы сохранились относительные позиции другого массива. Что ж, надо просто элементы другого массива менять аналогично первому, получим что-то вроде этого: (Type - тип элементов в другом массиве)

Код:
Quick(int b, int e)
{
	int i=b, j=e;
	int X = ar[(b+e) / 2]; // Здесь надо выбрать любой элемент массива.
	while (i<=j) {
		while (ar[i] < X) i++;
		while (ar[j] > X) j--;
		if (i<=j) {
			int tmp = ar[i];
			ar[i] = ar[j];
			ar[j] = tmp;

			Type tmp1 = ar1[i];
			ar1[i] = ar1[j];
			ar1[j] = tmp1;

			i++;
			j--;
		}
	}
	if (i<e) Quick(i, e);
	if (b<j) Quick(b, j);
}

Старый 15.01.2010, 09:27
Crenth вне форума Посмотреть профиль Отправить личное сообщение для Crenth Найти все сообщения от Crenth
  № 5  
Ответить с цитированием
Crenth
[+1 19.06.10]
[+1 27.07.10]
 
Аватар для Crenth

Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
скачайте книгу "СТРУКТУРЫ ДАННЫХ И АЛГОРИТМЫ
Bell Laboratories
Муррей-Хилл, Нью-Джерси
ДЖОН Э. ХОПКРОФТ ТЧОЯЛЧС
Корнеллский университет
Итака, Нью-Йорк
ДЖЕФФРИ Д. УЛЬМАН
Станфордский университет
Стамфорд, Калифорния


Она в русском переводе. Страница 228 - есть 100 методов сортировки с готовым кодом
Будет очень красиво

Старый 15.01.2010, 10:45
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 6  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
жжете господа, человеку надо бумажку согнуть в двух местах, а вы ему планы космических кораблей даете.
__________________
Блог, Twitter
Брюзга.

Старый 15.01.2010, 11:36
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 7  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Ну да, почему бы не реализовать вручную тот же пузырек? Просто двигать вместе с элементами а1 соответствующие элементы а2.
Код:
var a1:Array = [12, 3, 1, 2, 2];
/*массив числовых данных типа int 
неопределенной длины, с разными/одинаковыми, неупорядоченными значениями*/
var a2:Array = ['a', 'b', 'c', 'd', 'e'];
/*массив каких-либо объектов,
в данном случае для удобства и наглядности они представлены в виде
строковых данных, причем a1.length == a2.length;*/

function sort(a1, a2) {
	var i:Number = 0;
	var j:Number = 0;
	var x:Number = 0;
	var s:String = '';
	var size = a1.length;
	for (i = 0; i < size; i++) {
		for (j = size - 1; j > i; j--) {
			if (a1[j - 1] > a1[j]) {
				x = a1[j - 1];
				s = a2[j - 1];
				a1[j - 1] = a1[j];
				a2[j - 1] = a2[j];
				a1[j] = x;
				a2[j] = s;
			}
		}
	}
}
trace(a1);trace(a2);
sort(a1, a2);
trace(a1);trace(a2);


Последний раз редактировалось alexcon314; 15.01.2010 в 11:40.
Старый 15.01.2010, 12:40
Ixanezis вне форума Посмотреть профиль Отправить личное сообщение для Ixanezis Найти все сообщения от Ixanezis
  № 8  
Ответить с цитированием
Ixanezis

Регистрация: Sep 2009
Сообщений: 18
Вот и я про тоже.. Только если элементов много, то он не прокатит..

Старый 15.01.2010, 13:30
xpymbl4 вне форума Посмотреть профиль Отправить личное сообщение для xpymbl4 Найти все сообщения от xpymbl4
  № 9  
Ответить с цитированием
xpymbl4
 
Аватар для xpymbl4

Регистрация: Jul 2008
Адрес: Smolensk
Сообщений: 124
Отправить сообщение для xpymbl4 с помощью ICQ Отправить сообщение для xpymbl4 с помощью Skype™
Спасибо.
Пузырек вполне подходит и работает на ура.
Только я вместо
Код AS3:
var s:String = '';
пишу:
Код AS3:
var s:Object;
__________________
круглое тащим, квадратное катим

Старый 15.01.2010, 20:00
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 10  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
А чем плох Array.sortOn()? Или Vector.sort(myFunction)? В случае с вектором (FP 10 only) по идее будет даже быстрее, чем с Array... В обоих случаях имеется ввиду Object с полями index и value, как писал udaaff
__________________
...вселенская грусть

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:26.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.