
正文
JS 排序:冒泡、 二分搜索 /折半搜索 half-interval search
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
冒泡排序 : 重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
var arr = [5,0,-56,900,12];
//大的排序次数
for(var i=0; i<arr.length-1; i++){
//小的排序
for(var j=0; j<arr.length-1-i; j++){
//交换
if(arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
} for(var i=0; i<arr.length; i++){
document.write(arr[i]+" ");
} //-56 0 5 12 900
选择排序(Selection Sort) 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
插入排序( 英语: Insertion Sort) 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
快速排序(Quicksort) 是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
二分查找/折半搜索
//二分查找,前提: 该数组是有序的,如果不是有序的数组,不能使用
//思路: 找到数组的中间数(midVal),和你要查找的数(findVal)进行比较,如果midVal > findVal,则说明findVal在数组的左边,就把该数组二分(就只在左边查找)
var arr = [1,4,6,8,9,90,800];
//leftIndex rightIndex
function binarySearch(arr,findVal,leftIndex,rightIndex){
//进行查找有一个前提,防止无穷递归
if(leftIndex > rightIndex){
//提示找不到
document.write("找不到");
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.write("找到了,下标是"+midIndex);
return;
}
}
//测试
binarySearch(arr,9, 0, arr.length-1 );
//找到了,下标是4







