javascript 排序算法
目录:
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序
冒泡排序算法
function sort_bubble(arr,fn) {
let length = arr.length;
for(let x = 0; x < length; x ++) {
for (let y = x + 1; y < length; y ++) {
[arr[x],arr[y]] = fn(arr[x],arr[y])?[arr[y],arr[x]]:[arr[x],arr[y]];
}
}
return arr;
}
// 交换数组位置
function swap(a,b) {
return [a,b] = [b,a];
}
function ascending(x,y) {
return x > y;
}
function desending(x,y) {
return x < y;
}
选择排序
/**
* @param {array} array 传入要排序的数组
*/
function selectionSort(array) {
const len = array.length;
for (let i = 0; i < len; i++) {
let minIndex = i;
for (let j = i + 1; j < len; j++) {
if (array[j] < array[minIndex]) {
minIndex = j;
}
}
// 最小元素已经是第一个就不用交换
if( i !== minIndex) {
// let tmp = array[i];
// array[i] = array[minIndex];
// array[minIndex] = tmp ;
[array[i],array[minIndex]] = [array[minIndex],array[i]];
}
}
return array;
}
插入排序
function insertionSort(myArray) {
var len = myArray.length, // 数组的长度
value, // 当前比较的值
i, // 未排序部分的当前位置
j; // 已排序部分的当前位置
for (i=0; i < len; i++) {
// 储存当前位置的值
value = myArray[i];
/*
* 当已排序部分的当前元素大于value,
* 就将当前元素向后移一位,再将前一位与value比较
*/
for (j=i-1; j > -1 && myArray[j] > value; j--) {
myArray[j+1] = myArray[j];
}
myArray[j+1] = value;
}
return myArray;
}
快速排序
function quickSort(arr) {
if (arr.length <= 1) { return arr; }
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex, 1)[0];
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]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
};
参考: