2.10排序算法

排序算法篇
1、数组去重
1.1、indexOf()数组去重
基本思想:indexOf→寻找第一次出现的位置,并存入参数
缺点:遍历数组话费时间太多
例:var arr = [1,2,1,3,1,4];
var arr2 =[];
for(var i=0;i<arr.length;i++){
if(arr2.indexOf(arr[i]) == -1){
arr2.push(arr[i]);
}
}
1.2hash去重
基本思想:将已出现的元素当做属性存入一个object内,下标引用要比indexOf()快的多
缺点:占用内存多,以牺牲内存来换取时间
var arr = [1,2,1,3,1,4];
var result = [];
var hash = {};
for (var i = 0; arr[i] != undefined; i++) {
if (!hash[arr[i]]) {
result.push(arr[i]); //时间耽误在每一次重复元素的比较之中
hash[arr[i]] = ‘ture’;
}
}
1.3冒泡排序【Bubble Sort】(计算机排序的算法的基本思想)
基本思想是:
依次比较相邻的两个数,如果不符合排序规则,则调换两个数的位置。这样一遍比较下来,能够保证最大(或最小)的数排在最后一位
再对最后一位以外的数组,重复前面的过程,直至全部排序完成
function bubble(myarr){
var len = myarr.length;
for(var i = 0;i<len-1;i++) //需要几轮比较
{
for(var j=0;j<(len-1)–i;j++) //一轮比较中,需要比较的次数
{
if (myarr[j] > myarr[j+1]) //比较两个数组元素的大小,并将大的放在后面
{
var temp = myarr[j];
myarr[j] = myarr[j+1];
myarr[j+1] = temp;
}
}
}
console.log(myarr);
return myarr;
}
补充:数组排序sort方法
var newArr = arr.sort(
//比较规则
function(a,b){
return b-a;
// if(a>b){
// return 1; 交换位置
// }else(a<b){
// return -1; 不做处理
// }else{
// return 0; 也不做处理
// }
}
);

1.4快速排序
快速排序的思想很简单,整个排序过程只需要三步:
(1)在数据集中,选择一个元素作为“基准”(pivot).
(2)所有小于“基准”的元素,都移到“基准”的左边;所有大于“基准”的元素,都移到“基准”的右边;
(3)对“基准”左边的和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
思想;函数+递归
代码例:
var arr=[1,3,2,4,5,6,7,8,9];
function quickSort(tempArr){
if(tempArr.length<=1){
//当数组中只剩下一个元素时,就不再分割了(可能剩下一个空元素)
return tempArr;
}
//若传进来的数组不是只有一个元素
//1.获取基准元素
var index = Math.floor(arr.length/2);
var item=arr.splice(index,1);
//2.把小于基准的元素放在左边的数组,把大于基准的元素放在右边的数组
var leftArr=[];
var rightArr=[];
for(var k=0;k<tempArr.length;k++){
if(tempArr[k]<item){
leftArr.push(tempArr[k]);
}else{
rightArr.push(tempArr[k]);
}
//3.把小于基准值的数组、基准值和大于基准值的数组拼接成一个完整的数组。并返回出去
return quickSort(leftArr).concat(item,quickSort(rightArr));
}
quickSort(arr);
}
2.随机数(2.7内容)
3.递归
☆递归最经典的例子【阶乘算法】:
var func=function(x){
if(x===1){ //递归三要素
return 1;//①令递归结束的条件
}else{
return x*func(x-1);//②递归必须向结束的方向靠拢
//③内部调用函数本身
}
};
func(x);
与其苟延残喘,不如从容燃烧!~
原文地址:https://www.cnblogs.com/ilaozhao/p/6605706.html