11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 1838|回复: 0
上一主题 下一主题

[高级教程] 【9RIA—沐枫】—【基础小知识】第21节(选择排序、插值排序、二分法排序)

[复制链接] TA的其它主题
发表于 2018-2-6 20:53:52 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

转载:9RIA游戏开发者社区(天地会)
作者:沐枫(原天地会大神)


【基础小知识】系列教程(总目录)——沐枫大神出品


[Actionscript3] 纯文本查看 复制代码
ar arr:Array=[2,22,11,3,33,44,4];
var k:uint=0;
var len:uint=arr.length;
var temp:uint=0;
for(var i:uint=0;i<len-1;i++)
{
for(var j:uint=i+1;j<len;j++)
{
k=i;
if(arr[k]>arr[j])
{
k=j;
}
if(i!=k)
{
temp=arr[i];
arr[i]=arr[k];
arr[k]=temp;
}
}
}
trace(arr);//2,3,4,11,22,33,44


原理如下:
当第一个与第二个比较大小时,如果第二个比上一个小,那么就把相对较小的索引值传给k,最后在看看k是不是等于i如果不等于就把他们交换下值,然后再把i=k,接着往下比较。you Know?

[Actionscript3] 纯文本查看 复制代码
//——————————插值排序———————————————
var arr:Array=[15,3,7,2,12,6,8,1,9];
var krr:Array=[];
krr[0]=arr[0];
var len:uint=arr.length;
for(var i:uint=0;i<len;i++)
{
var ken:uint=krr.length;
for(var j:uint=0;j<ken;j++)
{
if(arr[i]<krr[j])
{
krr.splice(j,0,arr[i]);
break;//一旦比较一次立马跳出循环,免得最后插入好几个数。
}
}
}
trace(krr);//1,2,3,6,7,8,9,12,15
//————————————————————————————
//原理很简单,就是不停地比大小,然后往新数组里插入最小值。
//不知大家有没有试过把15换成0看看,结果是肯定的,没错,这种排序法也是美中不足。


[Actionscript3] 纯文本查看 复制代码
//——————————二分法排序———————————————
var arr:Array=[15,3,7,2,12,6,8,1,9];
var krr:Array=[];
krr[0]=arr[0];
var len:uint=arr.length;
var l:uint=0;
var r:uint=0;
var p:uint=0;
var n:uint=0;
for(var i:uint=1;i<len;i++)
{
n=krr.length;
l=0;
r=n;
for(var j:uint=0;j<n;j++)
{
p=Math.floor(l+(r-l)/2);
if(krr[p]<arr[i])
{
l=p+1;
}
else
{
r=p;
}
if(l==r)
{
krr.splice(l,0,arr[i]);
break;
}
}
}
trace(krr);//1,2,3,6,7,8,9,12,15
//————————————————————————————
//二分法,顾名思义,高中数学,不,初中数学上我们就接触过,所以在这不多加解释


感谢:感谢 samchow 提的意见是代码得到优化。

本人正在努力更新中,请各位多多支持,据说该是圣诞节了,祝大家节日愉快!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表