提升逻辑思维的sort源生

在写之前让我们来看看官方给出的sort作用与用法吧
  如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
  如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
  若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  若 a 等于 b,则返回 0。
  若 a 大于 b,则返回一个大于 0 的值。
总结起来就是一句话

对数组里面的内容进行大小排列,数值大的在左边或者在右边根据自己给的条件来判断,作用我们已经清楚了,我们来看看头疼的sort源生:

1、我们先给出一组错落的数组(有大有小掺杂着)

var arr=[2,4,6,88,78,67,65,9,12];

2、接下来给个函数封装

function fn(array) {

2.2、我们先来根据下标来判断一下输入的数组中有几个元素;

if (array <= 1) {
    return array;   // 如果只有一个函数的话,则不用按照大小排列,直接返回就好
}

2.3、再来思考一下,一个数组可以分成三部分,中间一部分为被衡量的值,比中间这个数值小的放左边,大的放右边;

var z = Math.floor(array.length / 2); //寻找中间值的下标,长度/2,在向下取整;详解(如果一个数组有9个元素,9/2为8.5  ,8.5向下取整就为8,8就为这9个数组正中间那个元素的下标;
var s = array.splice(z,1)[0];  // 我们再根据下标找这个元素是什么赋值给s;详解:根据截取的方法,第一个数值输入下标,向后截取1位,最后只有这一位数,所以下标为【0】;
var left = [] , right = []; //给出中间数左边和右边各一个空数组,作为将要存放判断完的元素;

for (let i = 0; i < array.length; i++) {  
    if (array[i] < s) {  //如果这个数组中比中间的元素小则用push推到左边的空数组中,一定要用push从后向前推;
        left.push(array[i])
    }else{
        right.push(array[i])//如果这个数组中比中间的元素大则用push推到右边的空数组中,一定要用push从后向前推;
    }
}
return fn(left).concat([s] , fn(right));//最后返回左边数组,中间的数和右边的数组,就是我们的排列好的数组了
}
console.log(fn(arr)); //最后进行打印;

你可能感兴趣的:(提升逻辑思维的sort源生)