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