美文网首页
js 学习总结:冒泡排序的实现以及Array.prototype

js 学习总结:冒泡排序的实现以及Array.prototype

作者: 泰然自若_750f | 来源:发表于2020-05-09 10:28 被阅读0次

冒泡排序

每次循环,比较当前位置项与下一个位置项的大小,如果当前项 > 后一项,则交换两者的位置。每次循环比较都能选择出一个最大值,放在末尾,剩余待筛选的比较项就减少一项。
如果数组存在n项,那么需要循环执行筛选的次数为n次

/**
 * 优化冒泡排序 
 * flag 做标记
  
 * @param {*} arr 
 */

function bubbleSort(arr){

    for(let i=0;i<arr.length;i++)
    {
        //标记
        let flag=true;
        for(let j=0;j<arr.length-i-1;j++)
        {
            if(arr[j]>arr[j+1])
            {
                flag=false;
                //前一项大于后一项,交换位置
                //采用es6 解构
                [arr[j],arr[j+1]]=[arr[j+1],arr[j]];
                
            }
        }
        //本轮循环没有交换位置,说明已经是一个有序数组
        if(flag) break;
    }
    return arr;

}

Array.prototype.sort 的简易实现

**sort()** 方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的

const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort(); 
const array1 = [1, 30, 4, 21, 100000];
array1.sort(); // [1, 100000, 21, 30, 4]

详细用法可点击链接
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

下面依赖冒泡排序实现简易版的Array.prototype.sort()


/**
 * 冒泡排序 
 * flag 做标记
 * @param {*} arr 
 * @param {*} func 
 */

function bubbleSort(arr,func){

    for(let i=0;i<arr.length;i++)
    {
        //标记
        let flag=true;
        for(let j=0;j<arr.length-i-1;j++)
        {
            if(func(arr[j],arr[j+1]))
            {
                flag=false;
                //前一项大于后一项,交换位置
                //采用es6 解构
                [arr[j],arr[j+1]]=[arr[j+1],arr[j]];
            }
        }
        //本轮循环没有交换位置,说明已经是一个有序数组
        if(flag) break;
    }
    return arr;

}
/**
 * 在数组原型上自定义实现数组排序
 * 
 */
Array.prototype._sort=function (func) {
        
         if(typeof func!=='function')
         {
             func=(a,b)=>a-b
         }

       return  bubbleSort(this,func);
    
}
//使用
[3,0,3,2,5,90.89,64,98]._sort((a,b)=>a-b>0) //[0, 2, 3, 3, 5, 64, 90.89, 98]
[3,0,3,2,5,90.89,64,98]._sort((a,b)=>a-b<0) //[98, 90.89, 64, 5, 3, 3, 2, 0]

相关文章

  • js 学习总结:冒泡排序的实现以及Array.prototype

    冒泡排序 每次循环,比较当前位置项与下一个位置项的大小,如果当前项 > 后一项,则交换两者的位置。每次循环比较都能...

  • 看图说话排序算法之冒泡排序

    排序算法的种类非常多,这里总结冒泡排序和对冒泡排序的改进---快速排序的循环实现和递归实现。 一丶冒泡排序 假设待...

  • js实现选择排序以及冒泡排序

    463 给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。 选择排序(S...

  • iOS算法总结-冒泡排序

    iOS算法总结-冒泡排序 iOS算法总结-冒泡排序

  • JS实现冒泡排序

    当i=1的时候,里面的循环再次完整执行,由于最大的数已经在最后了,没有必要去比较数组的最后两项,这也是j < le...

  • js实现 冒泡排序

    原理:两个相邻的数,进行比较,如果前面的数比后面的数大(或小),则交换位置,直到最大的数(或最小的数)沉底!!【从...

  • JS实现冒泡排序

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • JS实现排序算法

    总结下用js实现排序的几种普遍方法: 1. 冒泡排序 原理: 依次比较相邻的两个元素,如果后一个小于前一个,则交换...

  • python 排序算法

    文章概述 介绍各大常用经典的排序算法和效率,以及python实现常用算法(冒泡排序,选择排序,快速排序,插入排序)...

网友评论

      本文标题:js 学习总结:冒泡排序的实现以及Array.prototype

      本文链接:https://www.haomeiwen.com/subject/leyhnhtx.html