PDA

Просмотр полной версии : Максимальное значение массива.


SashNone
08.07.2007, 19:55
Господа, мучаюсь. Как найти максимум и минимум массива??

BigDan
08.07.2007, 19:56
Отсортировать его.

SashNone
08.07.2007, 20:05
Вот блин. Так и знал... но думал как в php найдётся функция... спасибо..

Тогда встречный вопрос. Как сделать не ссылочную переменную.
Т.е. если я делаю

Array_copy=My_Array
Array_copy.sort()...

То автоматом сортируется и My_Array

BigDan
08.07.2007, 20:42
var arr:Array = [4,7,1,9,6,3];
var min:Number = arr[0];
for(var i=0;i<arr.length;i++){
if(arr[i] < min) min = arr[i];
}
trace(min);
аналогично делаешь для max.

Kikasso
08.07.2007, 20:42
копия массива:
var arr:Array = [0,1,2,3,4,5,6,7,8,9];
var arr2:Array = arr.concat();
var arr3:Array = arr.slice();
//покажем что массивы разные:
arr2[2] = 222;
arr3[3] = 333;
trace(arr);
trace(arr2);
trace(arr3);
BigDan, точку забыл.

iNils
08.07.2007, 20:44
SashNone, есть кнопка http://www.flasher.ru/forum/images/russian/style3/buttons/edit.gif, поэтому не надо создавать несколько сообщений подряд, надо исправить последнее в теме.

wvxvw
08.07.2007, 20:47
var _a:Array = [1, 3, 2, 4];
var _b:Array = [].concat(_a);
_b.sort();
trace(_a);
trace(_b);

SashNone
08.07.2007, 20:51
iNils, учту.

Остальным, спасибо большое. Сложновато с php переходить на AS.

Kikasso
08.07.2007, 21:00
function findMax( inArr:Array ):Number {
var arr:Array = inArr.concat();
var max:Number = Number.MIN_VALUE;
var n:Number;
while( arr.length ){
n = Number (arr.pop());
if( max < n ) max = n;
}
return max;
}
var arr:Array = [0,100,2,3,4,5,-6,7,8,'A'];
trace( findMax(arr));

BigDan
08.07.2007, 21:04
Kikasso, а мой метод не легче?:)

wvxvw
08.07.2007, 21:14
var _a:Array = [1, 5, 2, -10, 'a', true, -80, 6];
function s(a, b):Number {
if(Number(a)>Number(b)){
return 1;
} else if(Number(a)==Number(b)){
return 0;
} else {
return -1;
}
}
_a.sort(s);
trace(_a); %)
Первое значение в массиве - наименьшее, последнее - наибольшее. Зачем изобретать велосипед? =)

Kikasso
08.07.2007, 21:36
Kikasso, а мой метод не легче?:)Зачем изобретать велосипед? =)

function findMax1( inArr:Array ):Number {
var arr:Array = inArr.concat();
var max:Number = Number.MIN_VALUE;
var n:Number;
while( arr.length ){
n = Number (arr.pop());
if( max < n ) max = n;
}
return max;
}
function findMax2( arr:Array ):Number {
var max:Number = Number.MIN_VALUE;
var n:Number = arr.length, k:Number;
for( var i:Number = 0; i < n; i ++){
k = Number( arr[i] );
if( max < k ) max = k;
}
return max;
}
function findMax3(inArr:Array ):Number {
var arr:Array = inArr.concat();
arr.sort( 2 | 16);
return arr[0];
}
var n = 100000;
var arr:Array = new Array();
while (n--)arr.push( Math.random());
var t:Number = getTimer();
trace( findMax1(arr));
trace( getTimer() - t ); //418
trace('---------------');
t = getTimer();
trace( findMax2(arr));
trace( getTimer() - t ); //161
trace('---------------');
t = getTimer();
trace( findMax3(arr));
trace( getTimer() - t ); //930

BigDan wins :)

SashNone
08.07.2007, 22:55
Чёрт... :(

var minX:Number = Number.MAX_VALUE;
var maxX:Number = Number.MIN_VALUE;
var minY:Number = Number.MAX_VALUE;
var maxY:Number = Number.MIN_VALUE;
for(i=1;i<arrX.length;i++){
if(arrX[i] < minX){ minX = arrX[i];}
if(arrX[i] > maxX) {maxX = arrX[i];}
if(arrY[i] < minY) {minY = arrY[i];}
if(arrY[i] > maxY) {maxY = arrY[i];}
}

trace(minX); //undefined
trace(maxX);1430.04124197256
trace("---------------");
trace(minY);-2457.88798584466
trace(maxY);299.620049708795

Массивы одинаковой длины, содержат исключительно цифренные генерируемые значения (+/- координаты). Если нужно могу вывести листинг массива.

BigDan
08.07.2007, 23:02
i=0,а не 1(в цикле)

etc
08.07.2007, 23:11
function findMax1(inArr:Array):Number {
var arr:Array = inArr.concat();
var max:Number = Number.MIN_VALUE;
var n:Number;
while (arr.length) {
n = Number(arr.pop());
if (max < n) {
max = n;
}
}
return max;
}
function findMax2(arr:Array):Number {
var max:Number = Number.MIN_VALUE;
var n:Number = arr.length, k:Number;
for (var i:Number = 0; i < n; i++) {
k = Number(arr[i]);
if (max < k) {
max = k;
}
}
return max;
}
function findMax3(array:Array):Number {
if (!min_cache) {
min_cache = Number.MIN_VALUE;
}
var n:Number = array.length;
var x:Number = min_cache;
while(n) {
var k = array[n--];
if (k > x) {
x = k;
}
}
return x;
}
var n = 100000;
var arr:Array = new Array();
while (n--) {
arr.push(Math.random());
}
var t:Number = getTimer();
trace(findMax1(arr));
trace(getTimer() - t);// 749
trace('---------------');
t = getTimer();
trace(findMax2(arr));
trace(getTimer() - t);// 168
trace('---------------');
t = getTimer();
trace(findMax3(arr));
trace(getTimer() - t);// 148

Kikasso
08.07.2007, 23:22
function findBoth( arr:Array ):Array {
var min:Number = Number.MAX_VALUE;
var max:Number = Number.MIN_VALUE;
var n:Number = arr.length, k:Number;
for( var i:Number = 0; i < n; i ++){
k = Number( arr[i] );
if( max < k ) max = k;
if( min > k ) min = k;
}
return [min, max];
}
///////////////
var myArray:Array = [5,7.6, 9, -20, 55, 99, 88];
var rez:Array = findBoth( myArray );
trace( 'min:' + rez[0] + ' max:'+rez[1] );
2__etc: да, while быстрее..