Talk is cheap , show me the code
不使用中间变量交换两个变量
;(function(x,y){
// 1.利用加法运算
x = x + y;
y = x - y;
x = x - y;
// 2.利用减法运算
x = x - y;
y = x + y;
x = y - x;
// 3.利用数组
x = [x,y];
y = x[0];
x = x[1];
// 4.利用对象
x = {x,y};
y = x.x;
x = x.y
// 5.利用es6解构
[x,y] = [y,x];
// 6.利用异或运算 x^y^y == x
x = x^y;
y = x^y;
x = x^y;
//7.利用运算符的优先级
x = [y,y = x][0]
//8.利用乘法
x = x * y;
y = x / y;
x = x / y;
})(2,4);
冒泡排序:循环把最大的数排到后面
;(function(arr) {
var index = null;
for (var i = 0; i < arr.length - 1;i++) {
for (var j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j+1]) {
index = arr[j+1];
arr[j+1] = arr[j];
arr[j] = index;
}
}
}
}([4,5,2,1,3]));
快速排序:递归
var quick = function(arr) {
if (arr.length <= 1) {
return arr;
}
var index = Math.floor(arr.length / 2);
var baseNum = arr.splice(index,1)[0];
var left = [],
right = [];
for (var i = 0; i < arr.length; i++) {
if(arr[i] < baseNum) {
left.push(arr[i]);
} else {
right.push(arr[i])
}
}
return quick(left).concat([baseNum],quick(right));
};
console.log(quick([5,3,2,4,1]));
选择排序
相对于冒泡,交换次数少。
冒泡是给定数值找位置,选择是给定位置找数值。
冒泡比较相邻位置的两个数,选择是按顺序比较。冒泡稳定,因为相同的值位置不会改变,但是选择则可能会改变。
// 选择排序
var select = function(arr) {
var min = null,
temp = null;
for (var i = 0; i < arr.length-1; i++) {
min = i;
for (var j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
if(min != i) {
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
return arr;
}