冒泡排序
var arr = [2, 11, 5, 3]
function sort5(array) {
var len = array.length,
i, j, tmp, exchange, result;
result = array.slice(0);
for (i = 0; i < len; i++) {
exchange = 0;
/**
* 第一次循环时i = 0,
* 进过内层的循环后,确保arr[0]为数组的最小项
* 不必比较当j = 0,也就是j =< i时的情况,因为前面的值必定是拍好并且最小的值
*/
for (j = len - 1; j > i; j--) {
if (result[j] < result[j - 1]) {
tmp = result[j];
result[j] = result[j - 1];
result[j - 1] = tmp;
exchange = 1;
}
}
// exchage优化性能
if (!exchange) {
return result;
}
}
return result;
}
console.log(sort5(arr)) // [2, 3, 5, 11]
快速排序
var arr = [2, 11, 5, 3]
// 快速排序
function sort2(arr) {
quickSort = function (arr) {
// 返回数组值
if (arr.length <= 1) { return arr }
// 获取居中数字的index
var pivotIndex = Math.floor(arr.length / 2)
// 截取居中的数
var pivot = arr.splice(pivotIndex, 1)[0]
var left = []
var right = []
// 通过遍历将数据分为比pivot小的或大的部分
for (var i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
// 继续调用quickSort,拼接返回结果
return quickSort(left).concat([pivot], quickSort(right))
}
return quickSort(arr)
}
console.log(sort2(arr)) // [2, 3, 5, 11]