关于js数组的六种算法---水桶排序,冒泡排序,选择排序,快速排序,插入排序,希尔排序的理解。...

1.水桶排序;


原理:首先找到arr这个数组中的最大项 max(此处为88),然后创建一个新的数组bucket,bucket数组长度为max,然后for循环遍历,在bucket的索引为arr[i]的添加数据,可以添加字符"water";然后创建一个新的空数组arr2;给数组arr2增加bucket数据。

代码如下。

var arr = [19,8,47,34,78,95,64,22,50,88];
    var max = Math.max.apply(false,arr);//找出arr数组中的最大值
    var bucket = new Array(max);//创建水桶数组,给数组添加“water”字符
    for(var i = 0;i<arr.length;i++){
      bucket[arr[i]] = "water";
    }
    var arr2 = []; //创建一个空数组。
    for(var i in bucket){ //遍历让bucket的选项添加到arr2数组中
      arr2.push(parseInt(i))
    }
    console.log(arr2)复制代码

2.冒泡排序:

生活原理:


如上图:五个人排队,按高矮顺序排;老师说更高的往后站,两两同学相比较,ps(假设小明和小红比,小明更高往后站,小张比小明高,他们位置不用换)第一次比较可以排出班级第一高的人,第二次比较可以找出第二高的人

js思路:找出数组中的最大值,排好序,接着排第二位,然后第三位。。。。。。。。

代码如下复制代码


3.选择排序


生活原理:假设小明是最矮的;然后通过比较,发现二狗要比小明矮,就和小明换位置,两两比较,通过第一次比较可以找出二狗是最矮的人,然后假设队伍的第二个人是最矮的,让他和剩下的人比较身高,依次找出其他人的位置。

js思路:假想数组中的任意一个值是最小;然后通过比较两两比较,找出索引值,换位,然后赋值。

4.快速排序


生活原理:假设小张(中间位置)是最矮的,比小张矮的往小张左边站,比小张高的往右边站;然后左边的人群再次比较,右边的人群再次比较身高,最后左边的人+小张+右边的人就是高矮顺序。

js原理:取数组的中间值,比较该值和其他数组的值,大于放到right数组中,小于放在left数组中;然后递归继续给数组排序


5.插入排序

插入排序的原理比较好理解,就像玩斗地主一样,抽到第一张牌,以它为中界值,比第一张牌小的往左边放,比第一张大的往右边放。第三张继续往前面两张插,依次插入所有的牌

js原理:以第一个为基点,分别插入后面的值。


6.希尔排序:

生活原理:假设一个班的人成绩固定,智商注定了成绩,这个班的人实施了班级互助,比如一个班级有10排,1排的和6排的人成为学习小组,2排和7排成为学习小组,依次类推,然后考试成绩出来了,两个学习小组之间互相比较,成绩高的往前坐,成绩差的往后坐(现在有个大概的排名了),然后再次考试,1排和3排成为学习小组,2排和5排成为学习小组(成绩好坏与座位更加趋近了),再次考试,1排和2排是学习小组。3和4是学习小组,依次,再次考试,再次排位置,此时的位置和成绩就是正相关了------------ps(委屈脸,不符合生活逻辑,强行解释一波,这个老师怕伤害孩子自尊,所以采取了这样的排法,哈哈,这就是保护孩子自尊的方法,滑稽脸.gif)

js原理:将待排序的序列分为若干组,在每组内进行直接插入排序,以使整个序列基本有序,然后再对整个序列进行直接插入排序。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值