js数组的顺序排序、完全随机打乱排序 总结

2019-02-01 08:54:10

一、顺序排序

1、按字符编码排序:sort()


var testArray=[23,500,1000,300,34,-2]; 

testArray.sort(); 

alert(testArray); //-2,1000,23,300,34,500

1

2

3

2、将数组元素倒序排:reverse()


var testArray=[-2,53,34,300,500,1000]; 

testArray.reverse(); 

alert(testArray); //1000,500,300,34,53,-2

1

2

3

3、在sort()里面加个比较函数(从小到大排)


var testArray=[23,500,1000,300,34,-2]; 

//传给sort一个比较函数,如果比较函数return值小于0,则表示a必须出现在b前面,否则在b后面。

testArray.sort(function(a,b){return a-b;}); 

alert(testArray); //-2,23,34,300,500,1000

1

2

3

4

4、快速排序 

效率相比上面的方法最高。 

看不懂下面代码的话可以参考:快速排序(Quicksort)的Javascript实现


var testArray=['df', 'rtr', 'wy', 'dafd', 'dfs', 'wefa', 'tyr', 'rty', 'rty', 'ryt', 'afds', 'wer', 'te']; 

var testArray2=[23,500,1000,300,34,-2]; 


//快速排序函数

var quickSort = function(arr) {

  if (arr.length <= 1) { return arr; }

  

  var pivotIndex = Math.floor(arr.length / 2);

  var pivot = arr.splice(pivotIndex, 1);//将基准分离出


  var left = [];

  var right = [];


  for (var i = 0; i < arr.length; i++){

    if (arr[i] < pivot) {

      left.push(arr[i]);

    } else {

      right.push(arr[i]);

    }

  }

  return quickSort(left).concat([pivot], quickSort(right));


};


//调用输出

alert(quickSort(testArray));//afds,dafd,df,dfs,rtr,rty,rty,ryt,te,tyr,wefa,wer,wy

alert(quickSort(testArray2)); //-2,23,34,300,500,1000

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

二、随机打乱排序(乱序)

1、低效版:


原理:和上面数组排序的2原理一样,让比较函数随机传回-1或1即可。 

这种方法打乱10000个元素的数组,所用时间大概在35ms上下,比较低效。


var testArray=[-2,23,34,300,500,1000]; 

testArray.sort(function(){return Math.random()>0.5?-1:1;}); 

alert(testArray); //结果不唯一

1

2

3

2、高效版: 

(1)洗牌算法: 

这种方法打乱10000个元素的数组来测试仅需要7,8毫秒的时间。


var testArray=[-2,23,34,300,500,1000]; 

if (!Array.prototype.derangedArray) {

    Array.prototype.derangedArray = function() {

        for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j] = x);

        return this;

    };

}

alert(testArray.derangedArray());//结果不唯一

1

2

3

4

5

6

7

8

(2)这个简单明了,且复杂度为 O(n)


function shuffle(arr) {

    var len = arr.length;

    for (var i = 0; i < len - 1; i++) {

        var index = parseInt(Math.random() * (len - i));

        var temp = arr[index];

        arr[index] = arr[len - i - 1];

        arr[len - i - 1] = temp;

    }

    return arr;

}

var arr = [-2,1,3,4,5,6,7,8,9];

console.log(shuffle(arr));//结果不唯一





  • 2019-01-08 14:35:50

    ueditor 特殊符号转义

    几个月前,就有同事跟我反馈,说磨途歌的留言板有问题。当时看了一下,她用的是谷歌浏览器,确实打不出中文,才按下一个字母,英文字母就从输入法的输入框中直接跳出来了,更换火狐浏览器就没这个问题。很奇怪的是,在我电脑上的火狐浏览器跟谷歌浏览器都没有问题,一开始还以为是她电脑的问题,就没在意了。