flash on 2013-7-10
♥0 |
Line 85 |
Modified 2013-07-10 22:10:37 |
MIT License
archived:2017-03-30 22:50:57
ActionScript3 source code
/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/1Ov3
*/
package {
import flash.text.TextField;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public var deb:TextField;
public function FlashTest() {
deb = new TextField();
deb.mouseEnabled = false;
deb.width = 465;
deb.height = 465;
addChild(deb);
var a:xFrame;
var i:int;
var num:int;
var vec:Vector.<xFrame>;
vec = new Vector.<xFrame>(0, false);
for (i = 0; i < 8; i++)
{
a = new xFrame();
//a.sortCode = Math.random() * 0xFF; //0xFFffFFff;
//a.sortCode = 0xdffffFff - i; // + Math.random()*5;
// a.sortCode = Math.random() * 0xfFffFFff;
//seems it doesnt work right with numbers above 0x0FFffFFf;
a.sortCode = Math.random() * 0x0FffFFff;
vec.push(a);
}
// deb.text = " " + (0x00ffFFff % 256);
// deb.text = " " + (2296952673 % 256);
//deb.text = " " + (0xFFffFFff % 256);
deb.text = "start ";
radixSort(vec, vec.length);
var ret:String;
ret = "";
var g:uint;
var k:uint;
num = vec.length;
for (i = 0 ; i < num; i++)
{
a = vec[i];
// g = a.sortCode >> 0;
// g %= 256;
// k = (a.sortCode >> 0) % 256;
// ret += "\n " + a.sortCode +" g " + g + " " + uint((a.sortCode >> 0)) % 256 + " k " +k ;
ret += "\n " + a.sortCode; // + " " + uint(a.sortCode);
}//nexti
deb.text = ret;
/*
var ret:String;
ret = "";
var shift:uint;
var g:uint;
var sc:uint;
var m:Number;
m = -1;
sc = m; //256; //0xffFFff00; //-242;
shift = 0;
ret += "sc " + sc ;
for (shift = 0; shift <= 32; shift+=8)
{
g = (sc >> shift) % 256;
ret += "\n shift " + shift + " g " + g;
}
deb.text = ret;
*/
}//ctor
public var tempVec:Vector.<xFrame> = new Vector.<xFrame>(4096, false);
public var tempBuck:Vector.<int> = new Vector.<int>(256, false);
public function radixSort(vec:Vector.<xFrame>, num:int):void
{
var a:xFrame;
var temp:Vector.<xFrame>;
var buck:Vector.<int>;
var i:int;
var k:uint;
var shift:int;
var g:int;
//todo -- in the prototype it was set in the wrong way
if (vec.length < num) { num = vec.length; }
temp = tempVec;
//todo -- resize when vec is larger than max
if (temp.length < num) { return; }
buck = tempBuck;
shift = 0;
while (shift < 32)
{
//reset bucket
for (k = 0; k < 256; k++)
{ buck[k] = 0; }
for (i = 0; i < num; i++)
{
g = (vec[i].sortCode >> shift) % 256;
if (g < 0) { g = -g; }
buck[g]++;
}
for (i = 1; i < 256; i++)
{
buck[i] += buck[i - 1];
}
for (i = num - 1; i >= 0; i--)
{
g = (vec[i].sortCode >> shift) % 256;
if (g < 0) { g = -g; }
temp[--buck[g] ] = vec[i];
}
for (i = 0; i < num; i++)
{
vec[i] = temp[i];
}
shift += 8;
}//wend
}//radixsort
}//classend
}
internal class xFrame
{
public var sortCode:int = 0;
}