//冒泡排序
思想:一个数组双层循环,判断左右相邻的两个数值,大的在右小的在左,如果左的比右的大,双方替换位置
之所以要数组的长度减一,是因为数组是从0开始的,比如说一个数组有7个元素,它的长度为7,分别为
a[0],a[1],a[2],a[3]a[4],a[5],a[6]这7个所以当你要取数组中最后一个a[6]时是需要用长度减1的
而为什么要减i呢,则是因为你的冒泡排序是把最大的放到最后一位,比如第一次循环的时候进行排序完,最后一位是最大的了,根本没有必要在第二次循环当中把他在拿去比大小了吧,并且如果不减i的话,只能排出最大一位(可以用来进行求数组中最大的值),以此类推……
var arr=[2,1,3,5,4,6];
function test(arr){
for(var i=0;i<arr.length-1;i++){ //-1是因为你要循环这个数组的长度-1次。因为前一轮浮上去的最大值不可能后面出现能比过它的
for(var j=0;j<arr.length-1-i;j++){ //-1-i是因为他的长度在不段变小,
if(arr[j]>arr[j+1]){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=arr[j];
}
}
}
return arr;
}
//快速排序
思想:给数组找一个中间的分割点,把数组分成左右两区,用数值去比较这个中间值,小的放左区,大的放右区,然后递归调用,实现快速排序
function test1(arr){
if(arr.length<=1){ return arr}
var left=[],right=[],mid=arr.splice(Math.floor(arr.length/2),1);
for(var i=0;i<arr.length;i++){
if(arr[i]<mid){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return test1(left).concat(mid,test1(right));
}
//二分查找
//非递归调用,适用于数组存在负数值查找
function test3(data,das){
var max=data.length-1;
var min=0;
while(min<=max){
var mid=Math.floor((min+max)/2,1);
if(data[mid]==das){
return mid;
} else if(das>data[mid]){
min=mid+1;
}else{
max=mid-1;
}
}
return false;
}
原文地址:https://www.cnblogs.com/JQ-Attribute/p/9053597.html