冒泡排序
function Bubbling(arr) {
if (!Array.isArray(arr)) {
return arr;
}
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] > arr[i]) {
[arr[j], arr[i]] = [arr[i], arr[j]];
}
}
}
return arr;
}
选择排序
function choice(arr) {
if (!Array.isArray(arr)) {
return arr;
}
let index;
for (let i = 0; i < arr.length; i++) {
index = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[index]) {//找出最小值
index = j;
}
}
if (index !== i) {//将最小值依次放在左边
[arr[index], arr[i]] = [arr[i], arr[index]];
}
}
return arr;
}
插入排序
function insertSort(arr) {
if (!Array.isArray(arr)) {
return arr;
}
for (let i = 1; i < arr.length; i++) {
//当前要处理的数
let temp = arr[i];
let j = i - 1;
while (j >= 0 && arr[j] > temp) {
//如果前一个数大于后一个数,将前一个数往后移一位
arr[j + 1] = arr[j];
j--;
}
//此时的j是要处理的数排序后应该在的位置
arr[j + 1] = temp;
}
return arr;
}
快速排序
function quickly(arr) {
if (!Array.isArray(arr)) {
return [];
}
if (arr.length <= 1) {//如果只有一个数,或者没有直接返回,结束递归
return arr;
}
let index = parseInt(arr.length / 2);//从中间吧数组分成两部分
let leftArr = [],rightArr = [];
for (let i = 0; i < arr.length; i++) {
if (i !== index) {//比中间的值小的放左边,大的放右边
if (arr[i] < arr[index]) {
leftArr.push(arr[i]);
} else {
rightArr.push(arr[i]);
}
}
}
// return [...quickly(leftArr), arr[index], ...quickly(rightArr)];
return [].concat(quickly(leftArr),[arr[index]],quickly(rightArr))//递归调用
}