Показать сообщение отдельно
Старый 25.11.2013, 15:37
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 6  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Попробуйте так:

Код AS3:
var a:Array = [0,2,0,0,0,1,1,1,0,2,0,2,0,2,0,1,0,1,1,2,1,2,1,2,0,1,2,1,0,1];
 
 
function smartSort(array:Array):Array {
	var array:Array = array.concat().sort();
	var elements:Array = [];
	var elementsLengths:Array = [];
	var totalRendomElements:int = 0;
	var k:int;
	for (k = 0; k < a.length; k ++) {
		var el:* = array[k];
		var index:int = elements.indexOf(el);
		if (index == -1) {
			totalRendomElements++;
			elements.push(el);
			index = elements.length - 1;
			elementsLengths[index] = 0;
		}
		elementsLengths[index]++;
	}
	var maxGroupLength:int = elementsLengths.concat().sort()[0];
	var newArray:Array = [];
	for (k = 0; k < maxGroupLength; k ++) {
		for (var j:int = 0; j < totalRendomElements; j ++) {
			elementsLengths[j]--;
			if (elementsLengths[j] >= 0) {
				newArray.push(elements[j]);
			}
		}
	}
	return newArray;
}
 
trace(a)
trace(smartSort(a))
Особо не тестировал.
__________________
hauts.ru