测试几种排序算法的javascript实现及效能测试
用来排序对像数组的. 最后还是决定用Array对像的sort方法,尽管这些都没用上,还是自己记在空间里当笔记用的.
快速排序,优化的快速排序,忘了名子的排序方法,对像提供的排序; 绝对不要用起泡法,除非是教学生。
为了测试,写了一个生成随机对像的方法,用来生成一个对像,对像中有一个属性 a ,a 的值为一个随机数字.以下为生成Array的方法:
function getRandomStr(){
return Math.round((1000 - 1 + 1 ) * Math.random() + 1);
}
var arr = new Array();
for(var i=0;i<5000;i++){
arr.push({a:getRandomStr()});
}
方法零:
方法一
实现原理:
遍历数组,取得其中最大值(最小值也可以),将取到的值移到队列的最后,然后再次遍历至数组长度-1的位置,如此反复,直到最后需要遍历的位置长度为0 时为止,由于遍历次数只与数组长度有关,所以每次运行的次数是固定的. 即一个1 至 数组最大下标的累加值;
实现代码:
// 快速排序;
function SortObject1(arr){
// 记录数组最后需要遍历的位置
var leavings = arr.length;
// 准备交换对像用的临时变量;
var p1 = arr[0],p=0,tmp;
// 遍历数组;
while(leavings != 0){
// 寻找数组中最大的值
for(var i=0;i < leavings;i++){
if(arr[i].a > p1.a){
p1 = arr[i];
p = i;
}
}
//移动最大数据对像到队尾;
leavings--;
tmp = arr[p];
arr[p] = arr[leavings];
arr[leavings] = tmp;
p1=arr[0],p=0;
}
}
方法二
实现原理:
优化第一种算法,在寻找最大值的同时,寻找最小值,将最大值移动到队尾,将小值移动到队头,则于参与运算的数组长度每次-2 所以运行次数为 1 +3 +5 +7 +9 + (i) , i<=Array.length
实现代码:(注释省了,跟上的一样,只是另一个if同时在找最小的值.)
function SortObject2(arr){
var leavings_e = arr.length;
var leavings_s = 1
var p_max = arr[0],p_max_l=0,tmp;
var p_min = arr[0],p_min_l=0,tmp;
while(leavings_e > leavings_s){
for(var i=leavings_s;i<leavings_e;i++){
if(arr[i].a > p_max.a){
p_max = arr[i];
p_max_l = i;
}
if(arr[i].a < p_min.a){
p_min = arr[i];
p_min_l = i;
}
相关文档:
没找到vs2008将JavaScript排版得好看些的办法,但有这个工具
http://jsbeautifier.org/
这是老外的一个在线排版JavaScript的服务。
我不喜欢下载安装一些不太”正“的软件工具。
==
顺便赞一下CSDN博客的"暂存箱"功能。
但在我发了”ADSL80端口“一文,在接下来的十来分钟了,修改不了,也不能 ......
function SetCookie(name,value){
var argv=SetCookie.arguments;
var argc=SetCookie.arguments.length;
var expires=(2<argc)?argv[2]:null;
var path=(3<argc)?argv[3]:null;
var domain=(4<argc)?argv[4]:null;
var secure=(5<argc)?argv[5]:false;
document.cookie=name+"="+escape(valu ......
我是一名程序员,使用Java语言进行管理软件开发工作。有一次开发项目中使用JavaScript来丰富用户体验效果,特地认真的学习了一下,从此对JavaScript产生了浓厚的兴趣。有机会参加了由电子工业出版社飞思公司举办的《JavaScript征途》读后感有奖召集活动,获得赠书学习。由于本人文学水平有限,此读后感的用词不当之处还望多 ......
使用的正则表达式的例子,但是没有说这些正则表达式如何使用,现在给大家几个例子,大家可以看看。
利用正则表达式判断是否是0-9的阿拉伯数字
function regIsDigit(fData)
{
var reg = new RegExp("^[0-9]$");
return (reg.test(fData));
}
利用这则表达式获取字符串的长度
function regDataLength(fData) ......