测试数据
let arr = []
for(let i =50000;i > 0;i--){
arr.push(i)
}
exports.arr = arr
冒泡排序
let aa = require('./testArr')
let arr = aa.arr
console.time('sortTime')
const len = arr.length
for (let i = 0; i < len; i++) {
let flag = true
for (let j = 0; j < len -i -1; j++) {
if (arr[j] > arr[j+1]) {
flag = false
let tmp = arr[j+1]
arr[j+1] = arr[j]
arr[j] = tmp
}
}
if(flag){
break;
}
}
console.timeEnd('sortTime')
插入排序
let aa = require('./testArr')
let arr = aa.arr
console.time('sortTime')
const len = arr.length
for (let i = 1; i < len; i++) {
for (let j = i -1; j >=0; j--) {
if (arr[i] > arr[j]) {
let tmp = arr[j]
arr[j] = arr[i]
arr[i] = tmp
}
}
}
console.timeEnd('sortTime')
选择排序
let aa = require('./testArr')
let arr = aa.arr
console.time('sortTime')
const len = arr.length
for (let i = 0; i < len; i++) {
for (let j = i + 1; j < len; j++) {
if (arr[i] > arr[j]) {
let tmp = arr[j]
arr[j] = arr[i]
arr[i] = tmp
}
}
}
console.timeEnd('sortTime')
快速排序
let aa = require('./testArr')
let arr = aa.arr
console.time('sortTime')
const len = arr.length
function sort(arr){
if(arr.length < 2){return arr}
let pivotIndex = Math.floor(arr.length / 2);
let centerValue = arr.splice(pivotIndex, 1)[0];
let leftArr = []
let rightArr = []
for(let i = 0;i<arr.length;i++){
if(arr[i] >= centerValue){
leftArr.push(arr[i])
}else{
rightArr.push(arr[i])
}
}
return sort(leftArr).concat(centerValue,sort(rightArr))
}
sort(arr)
console.timeEnd('sortTime')
归并排序
let aa = require('./testArr')
let arr = aa.arr
console.time('sortTime')
function reduceSort(arr) {
let len = arr.length
if (len < 2) {
return arr
}
let midddleIndex = Math.floor(len / 2)
let leftArr = arr.slice(0, midddleIndex)
let rightArr = arr.slice(midddleIndex, len)
let sortLeft = reduceSort(leftArr)
let sortRight = reduceSort(rightArr)
return merge(sortLeft, sortRight)
}
function merge(leftArr, rightArr) {
let resArr = []
while (leftArr.length && rightArr.length) {
if (leftArr[0] <= rightArr[0]) {
resArr.push(leftArr.shift())
} else {
resArr.push(rightArr.shift())
}
}
while (leftArr.length) resArr.push(leftArr.shift());
while (rightArr.length) resArr.push(rightArr.shift());
return resArr
}
reduceSort(arr)
console.timeEnd('sortTime')
希尔排序
let aa = require('./testArr')
let arr = aa.arr
console.time('sortTime')
function shellSort(arr) {
let halfLen = Math.floor(arr.length / 2)
for (let i = halfLen; i >= 1; i = Math.floor(i / 2)) {
for (let j = i; j < arr.length; j++) {
while ((j - i >= 0) && (arr[j - i] > arr[j])) {
let tmp = arr[j - i]
arr[j - i] = arr[j]
arr[j] = tmp
j = j - i
}
}
}
return arr
}
shellSort(arr)
console.timeEnd('sortTime')
堆排序
function heapSort(arr) {
for (var i = parseInt(arr.length / 2) - 1; i >= 0; i--) {
adHeap(i, arr, arr.length);
}
for (var j = arr.length - 1; j > 0; j--) {
swap(arr, 0, j);
adHeap(0, arr, j)
}
}
function adHeap(i, arr, length) {
let temp = arr[i];
for (var k = i * 2 + 1; k < length; k = k * 2 + 1) {
if (k + 1 < length && arr[k] < arr[k + 1]) {
k++;
}
if (arr[k] > temp) {
arr[i] = arr[k];
i = k;
} else {
break;
}
}
arr[i] = temp;
}
function swap(arr, i, j) {
let empty = arr[i];
arr[i] = arr[j];
arr[j] = empty;
}
let aa = require('./testArr')
let arr = aa.arr
console.time('sortTime')
heapSort(arr);
console.timeEnd('sortTime')