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]+"&nbsp;");
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

 

posted @ 2017-06-20 15:33  it80  阅读(324)  评论(0编辑  收藏  举报