一、冒泡排序
1思路:
冒泡排序思路:每一次对比相邻两个数据的大小,小的排在前面,如果前面的数据比后面的大就交换这两个数的位置
要实现上述规则需要用到两层for循环,外层从第一个数到倒数第二个数,内层从外层的后面一个数到最后一个数
2特点:排序算法的基础。简单实用易于理解,缺点是比较次数多,效率较低
3代码实现
var a = [3,7,11,43,87,5,99,22,51,8];
var n = a.length-1;
for (var i=1; i<=a.length-1;i++) {
for (var j=0; j<=n; j++) {
//不满足升序就对调
if (a[j] > a[j + 1]) {
var flag = a[j];
a[j] = a[j + 1];
a[j + 1] = flag;
}
}
n--;
}
alert(a.toString());
二、折半查找
1思路:
折半查找思路:
(1)用start表示查找范围的起点,end表示查找范围的终点
(2)只要start<=end 就重复一下步骤3
(3)和中间位置(mid)的那个数进行比较
1)相等:找到了,结束
2)大于:在前半段找,即end = mid -1
3)小于:在后半段找,即start = mid + 1
(4)输出结果
2特点:折半查找的最坏查找次数与数据量的关系是对数关系,所以说它的查找效率是很高的,但是任何事情往往都有两面性,它的高效率也是有高代价的,也就是要求有序。
3代码实现
var a = [3,5,7,8,11,22,43,51,87,99];
var num = Number(prompt("请输入要查找的值"));
var index = -1;//最初认为要找的数不在数组中
var start = 0;
var end = a.length - 1;
while(start <= end){
var mid = Math.ceil((start+end )/2);//计算中间位置
if(num == a[mid]){
index = mid;
break;
}else {
if(num > a[mid]){
//在后半段找
start = mid + 1;
}else{
//在前半段找
end = mid - 1;
}
}
}
alert(index);
三:总结
两种方法各有优缺点,但是这两种方法作为程序员必须掌握,因为一种是最基础的,另一种是最常用的,面试或者日常都会碰到。