排序(从小到大)
1.冒泡排序:
function sort(arr){
for(var i = 0;i<arr.length-1;i++){
for(var j = 0;j<arr.length - 1 - i;j++){
if(arr[j] > arr[j+1]){
var temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
2.选择排序:
function sort(arr){
var minIndex,temp;
for(var i = 0;i<arr.length-1;i++){
minIndex = i;
for(var j = i+1;j<arr.length;j++){
arr[j] < arr[minIndex] && (minIndex = j)
}
i === minIndex || (temp = arr[i],arr[i] = arr[minIndex],arr[minIndex] = temp)
}
return arr;
}
核心:找到i以后的最小的j->minIndex;i与minIndex互换;
3.插入排序:
function sort(arr){
for(var i = 1;i<arr.length;i++){
var temp = arr[i];
var j = i - 1;
while(j >= 0 && arr[j] > temp){
arr[j+1] = arr[j];
j--;
}
arr[j+1] = temp;
}
return arr;
}
核心:arr[i]与其之前的值相比,如果之前的值大,一次向后移,最后一个比arr[i]大的即(arr[j+1])与arr[i]交换位置;
4.快速排序:
function sort(arr){
if(arr.length === 1) return arr;
var pivotIndex = Math.floor(arr.length/2);
var pivot = arr.splice(pivotIndex,1)[0];
var left = [],right = [];
for(var i =0;i<arr.length;i++){
if(arr[i] < pivot){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return sort(left).concat([pivot],sort(right));
}
随机排序(打乱数组)
1. sort 伪随机 (后面的数值大的概率更大);
function shuffle(arr){
return arr.sort(function(){
return Math.random() - 0.5;
})
}
2. 交换位置
function shuffle(arr){
var i =0;
var len = arr.length;
for(i;i<len-1;i++){
var index = Math.floor(Math.random()*(len-1));
var temp = arr[index];
arr[index] = arr[len - i - 1];
arr[len - i - 1] = temp;
}
return arr;
}
3.splice
function shuffle(arr){
var b = [];
while(arr.length > 0){
var index = Math.floor(Math.random()*(arr.length));
b.push(arr[index]);
arr.splice(index,1)
}
return b;
}