二分一般针对有序排序的数 乱序排列 可以学习最简单的选择排序
选择排序速度并不快 但是很好懂
比如一个集合 [99,85,43,70,20,88]
第一次选择最小的数 20
第二次选择最小的数 43
第三次选择最小的数 70
第四次选择最小的数85
第五次选择最小的数88
第六次选择最小的数99
用大O表示法 O (n的平方) 这里的数有6个 正常来讲的 是 36次
而这里没有严格的按照这个来 次数是 6 + 5 + 4 + 3 + 2 + 1次 运行的次数为 6*1/2*7 n*1/2*(n+1)
平均检查的元素为(n+1)/2
let score = [99, 85, 43, 70, 20, 88];//一个分数的集合
function getMin(list) {
var min = list[0];//设置最小的数
var minIndex = 0;//设置最小数的下标
for (let i = 0; i < list.length; i++) {//循环6次
let item = list[i];
if (item <= min) { //如果比这个默认值小 最小数就是谁
min = item;
minIndex = i;
}
}
return minIndex;//返回返回值 用下标好一点 因为可以根据下标删除
}
function search(list){
var newList = [];
for(var i=0;i<list.length;i++){
let minIndex = getMin(list);
//找到最小值 并且从集合中删除 放入到新的集合中
newList.push(...list.splice(minIndex,1));
i--;//删除以后 每次都从0开始
}
return newList;
}
运行结果
额外补充 这种数组操作 还有另外一种 链表
数组的 查询 读取速度快
链表的删除和新增块