首页 > 代码库 > 冒泡排序 与二分法

冒泡排序 与二分法

<script type="text/javascript">

//var attr = [1,8,26,4,15,3,7,42,9];

//对数组元素进行排序
//冒泡排序
/*8 6 4 5 3 7 2 9 1 8
8 6 5 4 7 3 9 2 1 7
8 6 5 7 4 9 3 2 1 6
8 6 7 5 9 4 3 2 1 5
8 7 6 9 5 4 3 2 1 4
8 7 9 6 5 4 3 2 1 3
8 9 7 6 5 4 3 2 1 2
9 8 7 6 5 4 3 2 1 1 */

//两个相邻的元素进行比较,满足条件元素互换
//进行比较的轮数是数组的长度减一

//定义一个交换使用的中间变量
//var zj = 0;

//控制比较的轮数
/*for(var i=0;i<attr.length-1;i++)
{
//控制每轮比较的次数
for(var j=0;j<attr.length-1-i;j++)
{
//如果下一个元素大于当前元素
if(attr[j]<attr[j+1])
{
//互换
zj = attr[j];
attr[j] = attr[j+1];
attr[j+1] = zj;

}
}
}*/

//alert(attr[0]);

//attr.sort();

//alert(attr[3]);


//在数组里面查找数据
var attr = [1,2,3,4,5,6,7,8,9];

//要查找的值
var v = 0;


//循环遍历的方式
/*var sy = -1;
for(var i=0;i<attr.length;i++)
{
if(attr[i]==v)
{
sy = i;
}
}

if(sy == -1)
{
alert("没找到数据");
}
else
{
alert("该数据在数组里面的索引为:"+sy);
}*/

//二分法查找数据

//最小索引
var minsy = 0;
var maxsy = attr.length-1;
var midsy ;

//循环比较
while(true)
{
//计算中间索引
midsy = parseInt((minsy+maxsy)/2);

//比较中间值和用户的值
//判断中间索引的值是否等于用户要查找的值
if(attr[midsy] == v)
{
//如果等于,就退出循环,找到了数据
break;
}

//判断是否只剩下两个数据
if(midsy == minsy)
{
//判断两个数据中的另外一个是否等于用户查找的值
if(attr[midsy+1]==v)
{
//找到了值,退出循环
midsy = midsy+1;
break;
}
else
{
//没有找到值,退出循环
midsy = -1;
break;
}
}
//用来改范围
if(attr[midsy]>v)
{
maxsy = midsy;
}
else
{
minsy = midsy;
}
}

 

alert(midsy);

</script>

冒泡排序 与二分法