// 随即排序
// 第一种方式
var arr = [10, 1, 8, 2, 5];
for (let i = 0; i < arr.length; i++) {
let num = Math.floor(Math.random()*arr.length);
arr.push(arr[num]);
arr.splice(num, 1);
}
//第二种方式
for (let i = 0; i < arr.length; i++) {
let num = Math.floor(Math.random()*arr.length);
let temp = 0;
temp = arr[i];
arr[i] = arr[num];
arr[num] = temp;
}
// 冒泡排序(两两对比,每次循环得到最大的在最右边,所以不用比较每次得最右边了)
var arr = [10, 1, 8, 2, 5];
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]) {
let temp = 0;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
// 快速排序
var arr = [10, 1, 8, 2, 5];
var quickSort = function(arr) {
if (arr.length <= 1) {//如果数组长度小于等于1无需判断直接返回即可
return arr;
}
var pivotIndex = Math.floor(arr.length / 2);//取基准点
var pivot = arr.splice(pivotIndex, 1)[0];//取基准点的值,splice(index,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]);//比基准点大的放在右边数组
}
}
//递归执行以上操作,对左右两个数组进行操作,直到数组长度为<=1;
return quickSort(left).concat([pivot], quickSort(right));
}
console.log(quickSort(arr));
简写快速排序
var arr = [10, 1, 8, 2, 5];
function quickSort(arr) {
if (arr.length < 1) return arr;
let [left, right, base] = [[], [], arr[Math.floor(arr.length/2)]];
arr.splice(Math.floor(arr.length/2), 1);
for (var i = 0; i < arr.length; i++) {
arr[i] > base? right.push(arr[i]) : left.push(arr[i]);
}
return quickSort(left).concat([base], quickSort(right))
}
console.log(quickSort(arr));