JavaScript 数组 sort,reverse,冒泡排序,乱序

来源:互联网 发布:信息技术网络研修总结 编辑:程序博客网 时间:2024/05/17 04:32
<script>

//3、实现对数组进行乱序
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];  
// console.log(a.sort());

for(var i=0;i<a.length;i++){
var r = parseInt(Math.random()*10);
// console.log(r);
}


//sort() 理解
var arry = [20,45,12,67,100,1,99];
console.log(arry.sort()); 
//结果:[1, 100, 12, 20, 45, 67, 99] 并不是按照大小排序,而是按照第一位数由小到大排序


var fruit = ['apple','orange','banana','grape','snowpear'];
console.log(fruit.sort());
/*结果:["apple", "banana", "grape", "orange", "snowpear"] 也是按照数组每个元素首字母
顺序排序*/


//reverse() 反序
console.log(arry); //此时数组顺序:[1, 100, 12, 20, 45, 67, 99]
console.log(arry.reverse());  //结果:[99, 67, 45, 20, 12, 100, 1]  反序


console.log(fruit);//此时数组顺序:["apple", "banana", "grape", "orange", "snowpear"]
console.log(fruit.reverse()); //["snowpear", "orange", "grape", "banana", "apple"] 


//reverse()没有参数,只有一个反序作用

//sort(function)是带可选参数的,作用规定排序顺序,并且是参数必须是函数。
//利用sort()写最简单的冒泡排序法
var arry2 = [20,45,12,67,100,1,99];
var arry3 = arry2.sort(function(a,b){
/*若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。*/


return a - b;


});
console.log(arry3);  //[1, 12, 20, 45, 67, 99, 100] //这才是最简单的冒泡排序法


// 如果想要从大到小的排序徐,则需要把arry3.reverse();反序一下即可

//第二种冒泡排序法循环比较


function bubbleSort(arry){
var temp;
for(var i=0;i <arry.length-1;i++){//外循环减少一次,内循环减少arry.lenth次
for(var j=0;j<arry.length;j++){
if(arry[j]>arry[j+1]){
temp = arry[j];
arry[j] = arry[j+1];
arry[j+1] = temp;
}
}
}
return arry;
}
var arryN = [20,45,12,67,100,1,99,21,800,33];
console.log(bubbleSort(arryN));  //[1, 12, 20, 21, 33, 45, 67, 99, 100, 800]


//利用sort()对数组进行一个乱序排序
var ar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];  
function confuse(){
return (Math.random() > 0.4)?-1:1;   /*人为控制a,b 返回值,但是此方法排序并不是很乱,也就是
在数组前面的元素还是靠近前面,后面的元素靠近后面,
*/
}
console.log(ar.sort(confuse));


//于是引进php的乱序排序法:(网上)
var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
 
if (!Array.prototype.shuffle) { 
   Array.prototype.shuffle = 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;
   };
}

console.log(a.shuffle());


//乱序第三种方法

var array =[0,1,2,3,4,5,6,7,8,10];
function change(arr){
var temp, r;
for(var i=0;i<arr.length;i++){
temp = arr[i];
r = Math.floor(Math.random()*arr.length);   
//Math.floor()向下取整  Math.ceil()向上取整  Math.round()四舍五入 
arr[i] = arr[r];
arr[r] = temp;
}
}
change(array);
console.log(array);



</script>