window.onload = function() {
const arr = [3,5,2,9,10,19,13,6,4,7]
console.time('冒泡耗时')
function maopao(arr) {
let len = arr.length
for(let i = 0; i < len; i++) {
for (let j = 0; j < len - i; j++) {
if (arr[j] > arr[j+1]) {
let tmp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = tmp
}
}
}
return arr
}
console.log('冒泡排序',maopao(arr))
console.timeEnd('冒泡耗时')
function xuanze(arr) {
let len = arr.length
let minIndex
let result = []
for(let i = 0; i < len; i++) {
minIndex = i
for(let j = i; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j
}
}
let tmp = arr[i]
arr[i] = arr[minIndex]
arr[minIndex] = tmp
}
return arr
}
console.log('选择排序', xuanze(arr))
function charu(arr){
let len = arr.length
for(let i = 0; i < len; i++) {
for (let j = 0; j < i; j++) {
if (arr[j] < arr[j-1]) {
let tmp = arr[j-1]
arr[j-1] = arr[j]
arr[j] = tmp
}
}
}
return arr
}
console.log('插入排序', charu(arr))
function kuaisu(arr) {
if (arr.length <= 1) return arr
let pointIndex = arr.splice(Math.floor(arr.length / 2), 1)[0]
let len = arr.length
let left = []
let right = []
for (let i = 0; i < len; i++) {
if (arr[i] < pointIndex) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
return kuaisu(left).concat([pointIndex],kuaisu(right))
}
console.log('快速排序', kuaisu(arr))
function merge(arr) {
if (arr.length < 2) return arr
let middle = Math.floor(arr.length/2)
let left = arr.slice(0, middle)
let right = arr.slice(middle)
return guibing(merge(left), merge(right))
}
function guibing(left, right) {
let result = []
while(left.length && right.length) {
if (left[0] <= right[0]) {
result.push(left.shift())
} else {
result.push(right.shift())
}
}
while(left.length) {
result.push(left.shift())
}
while(right.length) {
result.push(right.shift())
}
return result
}
console.log('归并排序', merge(arr))
function shellSort(arr) {
for(let gap = Math.floor(arr.length/2); gap > 0; gap = Math.floor(gap/2)) {
for(let i = gap; i < arr.length; i++) {
let j = i;
let temp = arr[j];
for(; j> 0; j -= gap) {
if(temp >= arr[j-gap] || j - gap < 0) {
break;
}
arr[j] = arr[j-gap];
}
arr[j] = temp;
}
}
return arr;
}
console.log('希尔排序', shellSort(arr))
}
console