冒泡排序和二分查找
<script type=
"text/javascript"
>
????
/**
?????
* js 冒泡排序
?????
*/
????
//var? numArr = [-3,-10,0,32,9,3,23];
????
var
??numArr = [-1,0,3,23,34,];
????
var
?flag =?
false
;
????
for
(
var
?i = 0; i < numArr.length -1; i++) {?
//控制比较多少轮
????????
document.writeln(
"比较多少轮:"
?+ (i+1) +?
"<br />"
);
????????
for
(
var
?j = 0; j < numArr.length - i -1;j++) {
//控制每轮比较的次数
????????????
if
(numArr[j] > numArr[j+1]) {
????????????????
//交换 //从小到大
????????????????
var
?temp = numArr[j];
????????????????
numArr[j] = numArr[j+1];
????????????????
numArr[j+1] = temp;
????????????????
flag =?
true
;
????????????
}
//if(numArr[j] < numArr[j+1]) { //从大到小 // //交换 // var temp = numArr[j+1]; //numArr[j+1] = numArr[j]; //numArr[j] = temp; //flag = true;?????????
}
????????
if
(flag) {
????????????
flag =?
false
;
????????
}?
else
?{
????????????
//禁止循环,这样做的好处:当数组有序时就不要在循环了
????????????
break
;
????????
}
????????????????????????????
?????
}
????
document.writeln(numArr);
</script>
??<script type=
"text/javascript"
>
????
/**
?????
* JS的二分查找
?????
* 1.注意事项:二分查找必须针对的是有序的数组,不是有序的数组不能使用二分查找法
?????
* 2.思路:首先找到数组的中间数(midVal),和你要查找的数(findVal)进行比较,如果
?????
* midVal > findVal ,则说明在数组的左边,就把该数组二分(就只在左边查找)
?????
*/
???????????????
?????
function
?binarySearch(arr,findVal,leftIndex,rightIndex) {
????????
//防止无穷递归
????????
if
(leftIndex > rightIndex) {
????????????
document.writeln(
"找不到"
);
????????????
return
;
????????
}
????????
//找到中间这个值
????????
var
?midIndex = Math.floor((leftIndex + rightIndex)/2);
????????
var
?midVal = arr[midIndex];
????????
//比较
????????
if
(midVal > findVal) {
????????????
//在左边查找
????????????
binarySearch(arr,findVal,leftIndex,midIndex - 1);
????????
}?
else
?if
(midVal < findVal) {
????????????
//在右边查找
????????????
binarySearch(arr,findVal,midIndex+1,rightIndex);
????????
}?
else
?{
????????????
document.writeln(
"找到了,位置为:"
?+ midIndex);
????????????
return
;
????????
}
????
}
????
var
?arr = [1,2,5,67,89,90];
????
binarySearch(arr,3,0,arr.length -1);
</script>
?<script type=
"text/javascript"
>
????
/*数组的简单行列倒置*/
????
var
?arr = [[2,4,6,8],[1,3,5,9],[9,7,4,2]];
???????????
?????
//定义一个新的数组
????
var
?arr2 = [];
????
//初始化新数组的行数,我认为该数组是规则的,并初始化
????
for
(
var
?i = 0; i < arr[0].length; i++) {
????????
arr2[i] = [];
????
}
???????????
?????
//动态的添加新数据,遍历旧数据
????
for
(
var
?i=0; i < arr.length; i++) {
????????
for
(
var
?j=0; j < arr[i].length; j++) {
????????????
arr2[j][i] = arr[i][j];
????????
}
????
}
???????????
?????
//遍历新数组,显示数据
????
for
(
var
?i=0; i < arr2.length; i++) {
????????
for
(
var
?j=0; j < arr2[i].length; j++) {
????????????
document.writeln(arr2[i][j] +?
" "
);
????????
}
????????
document.writeln(
"<br />"
);
????
}
???????????
?</script>
http://hanchaohan.blog.51cto.com/2996417/1308498