如何用ActionScript写个快速排序呢?
actionscript吧
全部回复
仅看楼主
level 11
wzzfcs2010 楼主
如何用ActionScript写个快速排序呢?
写不出来啊[囧]
2012年06月28日 08点06分 1
level 8
//quick sort
function quick_sort(a:Array):void{
_quick_sort(a,0,a.length-1);
}
function _quick_sort(a:Array,from:int,to:int):void{
if(from<to){
var q:int=partition(a,from,to);
_quick_sort(a,from,q-1);
_quick_sort(a,q+1,to);
}
}
function partition(a:Array,from:int,to:int):int{
var j:int=from-1;
var temp:int;
for(var i=from;i<to;i++){
//trace(a,i,"begin");
if(a[i]<a[to]){
j++;temp=a[j];
a[j]=a[i];a[i]=temp;
}//trace(a,i,"end");
}
j++;
temp=a[j];
a[j]=a[i];
a[i]=temp;
return j;
}
2012年06月29日 08点06分 3
谢谢了,,,,排序本身的代码我已经写出来了,,,不过现在我想做个排序的动画,,就是运用数字的原件,按照快速排序的步骤,能够一步一步显示出来。。我不知道怎么通过图型原件跟这排序的代码相结合。。。您能给我指点一二吗?
2012年06月29日 10点06分
@wzzfcs2010 这里写不下= =见楼下= =
2012年07月01日 03点07分
level 8
import flash.text.TextField;import flash.display.Sprite;import flash.utils.Timer;import flash.events.TimerEvent;import fl.transitions.Tween;import fl.transitions.easing.Regular;import fl.transitions.TweenEvent;
stage.frameRate=60;//quick sortvar steps:Array;var tfs:Array;var s:Sprite=new Sprite();var last:Boolean;addChild(s);quick_sort([2,5,4,8,7,1,4]);function quick_sort(a:Array):void{while(s.numChildren>0){s.removeChildAt(0);}steps=[];tfs=[];last=false;for(var i=0;i<a.length;i++){var tf:TextField=new TextField();tf.text=a[i];tfs.push(tf);tf.x=(stage.stageWidth-100)*i/(a.length-1)+50;tf.y=(stage.stageHeight-tf.height)/2;s.addChild(tf);}_quick_sort(a,0,a.length-1);showSteps();}function _quick_sort(a:Array,from:int,to:int):void{if(from<to){var q:int=partition(a,from,to);_quick_sort(a,from,q-1);_quick_sort(a,q+1,to);}}function partition(a:Array,from:int,to:int):int{var j:int=from-1;var temp:int;for(var i=from;i<to;i++){if(a[i]<a[to]){j++;exchange(a,i,j);}}j++;exchange(a,i,j);return j;}function exchange(a:Array,i:int,j:int):void{trace(a,i,j);var temp:int=a[i];a[i]=a[j];a[j]=temp;if(i!=j)steps.push([i,j]);}function showSteps():void{trace(steps);var t:Timer=new Timer(1000,steps.length);t.addEventListener(TimerEvent.TIMER,time);t.addEventListener(TimerEvent.TIMER_COMPLETE,comp);t.start();}function time(e:TimerEvent):void{var i:int=steps[(e.target as Timer).currentCount-1][0];var j:int=steps[(e.target as Timer).currentCount-1][1];trace(i,j);showExchange(i,j);}function showExchange(i:int,j:int):void{var temp:TextField=tfs[i];tfs[i]=tfs[j];tfs[j]=temp;new Tween(tfs[i],"x",Regular.easeIn,tfs[i].x,tfs[j].x,0.8,true);var t:Tween=new Tween(tfs[j],"x",Regular.easeIn,tfs[j].x,tfs[i].x,0.8,true);t.addEventListener(TweenEvent.MOTION_FINISH,finish);}function finish(e:TweenEvent){if(last){e.target.removeEventListener(TimerEvent.TIMER_COMPLETE,comp);e.target.removeEventListener(TimerEvent.TIMER,time);var tf:TextField=new TextField();tf.text="排序完成!";tf.x=(stage.stageWidth-tf.width)/2;tf.y=stage.stageHeight/4;s.addChild(tf);}}function comp(e:TimerEvent){last=true;}
2012年06月30日 05点06分 5
我贴上去 运行了下。。他说有错误:1071: 语法错误: 在属性 quick (而不是 sortvar)之后需要一个定义关键字(如 function)。 这个是什么意思?
2012年07月01日 06点07分
level 8
因为被百度贴吧吞掉了我的换行符= =导致注释跟代码混一起了= =
我手动换下行好了= =
import flash.text.TextField;
import flash.display.Sprite;
import flash.utils.Timer;
import flash.events.TimerEvent;
import fl.transitions.Tween;
import fl.transitions.easing.Regular;
import fl.transitions.TweenEvent;
stage.frameRate=60;
//quick sort
var steps:Array;
var tfs:Array;
var s:Sprite=new Sprite();
var last:Boolean;
addChild(s);
quick_sort([2,5,4,8,7,1,4]);
function quick_sort(a:Array):void{
while(s.numChildren>0){
s.removeChildAt(0);
}
steps=[];
tfs=[];
last=false;
for(var i=0;i<a.length;i++){
var tf:TextField=new TextField();
tf.text=a[i];
tfs.push(tf);
tf.x=(stage.stageWidth-100)*i/(a.length-1)+50;
tf.y=(stage.stageHeight-tf.height)/2;
s.addChild(tf);
}
_quick_sort(a,0,a.length-1);
showSteps();
}
function _quick_sort(a:Array,from:int,to:int):void{
if(from<to){
var q:int=partition(a,from,to);
_quick_sort(a,from,q-1);
_quick_sort(a,q+1,to);
}
}function partition(a:Array,from:int,to:int):int{
var j:int=from-1;
var temp:int;
for(var i=from;i<to;i++){
if(a[i]<a[to]){
j++; exchange(a,i,j);
}
}j++;
exchange(a,i,j);
return j;
}
function exchange(a:Array,i:int,j:int):void{
var temp:int=a[i];
a[i]=a[j];
a[j]=temp;
if(i!=j)steps.push([i,j]);
}
function showSteps():void{
var t:Timer=new Timer(1000,steps.length);
t.addEventListener(TimerEvent.TIMER,time);
t.addEventListener(TimerEvent.TIMER_COMPLETE,comp);
t.start();}
function time(e:TimerEvent):void{
var i:int=steps[(e.target as Timer).currentCount-1][0];
var j:int=steps[(e.target as Timer).currentCount-1][1];
showExchange(i,j);
}
function showExchange(i:int,j:int):void{
var temp:TextField=tfs[i];
tfs[i]=tfs[j];
tfs[j]=temp;
new Tween(tfs[i],"x",Regular.easeIn,tfs[i].x,tfs[j].x,0.8,true);
var t:Tween=new Tween(tfs[j],"x",Regular.easeIn,tfs[j].x,tfs[i].x,0.8,true);
t.addEventListener(TweenEvent.MOTION_FINISH,finish);
}
function finish(e:TweenEvent){
if(last){ e.target.removeEventListener(TimerEvent.TIMER_COMPLETE,comp);
e.target.removeEventListener(TimerEvent.TIMER,time);
var tf:TextField=new TextField();
tf.text="排序完成!";
tf.x=(stage.stageWidth-tf.width)/2;
tf.y=stage.stageHeight/4;
s.addChild(tf);
}
}
function comp(e:TimerEvent){
last=true;
}

2012年07月01日 09点07分 6
哇塞!!好强大!!!!牛人啊!!!阿里嘎多!!!
2012年07月02日 04点07分
2012年07月02日 04点07分
可以加你QQ吗??有机会想向你请教
2012年07月02日 04点07分
@wzzfcs2010 420100874
2012年07月02日 05点07分
level 3
= =
2012年07月05日 09点07分 7
1