冒泡排序
/**
* 比较相邻的两个元素,如果第一个比第二个大,则交换位置
* 每一对相邻元素重复第一个步骤 从开始第一对到最后一对 这样在最后的元素应该会是最大的数
* 针对所有元素重复以上步骤
*/
function bubbleSort(arr){
const len = arr.length
for(let i=0
let isSort = true
for(let j=0
if(arr[j]>arr[j+1]){
[arr[j],arr[j+1]] = [arr[j+1],arr[j]]
isSort = false
}
}
if(isSort){
break
}
}
return arr
}
console.log(bubbleSort([3,44,15,36,26,27,2,46,4,19,50,48]))
快速排序
function quickSort(arr){
if(arr.length<=1) return arr
const left=[],right=[],current=arr.splice(0,1)
for(let i=0;i<arr.length;i++){
if(arr[i]<current){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return quickSort(left).concat(current,quickSort(right))
}
console.log(quickSort([3,44,15,36,26,27,2,46,4,19,50,48]))
插入排序
/**
* 从第一个元素开始,该元素可以认为已经被排序
* 取出下一个元素,在已排序的元素序列中从后向前扫描
* 如果已排序的该元素大于新元素,则将该元素移到下一位
* 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
* 将新元素插入到该位置后
* 重复步骤2-5
*/
function insertSort(arr){
let temp
for(let i=1
temp=arr[i]
let j=i-1
while(j>=0&&arr[j]>temp){
arr[j+1]=arr[j]
j--
}
arr[j+1]=temp
}
return arr
}
console.log(insertSort([3,44,15,36,26,27,2,46,4,19,50,48]))
选择排序
function selectSort(arr){
let len = arr.length,minIndex,temp
for(let i=0
minIndex=i
for(let j=i+1
if(arr[j]<arr[minIndex]){
minIndex=j
}
}
temp = arr[i]
arr[i]=arr[minIndex]
arr[minIndex]=temp
}
return arr
}
console.log(selectSort([3,44,15,36,26,27,2,46,4,19,50,48]))
归并排序
function merge(left,right){
let temp = []
while(left.length&&right.length){
if(left[0]<right[0]){
temp.push(left.shift())
}else{
temp.push(right.shift())
}
}
return temp.concat(left,right)
}
function mergeSort(arr){
const len =arr.length
if(len<2) return arr
let mid=Math.floor(len/2),left=arr.slice(0,mid),right=arr.slice(mid)
return merge(mergeSort(left),mergeSort(right))
}
console.log(mergeSort([3,44,15,36,26,27,2,46,4,19,50,48]))
希尔排序
function shellSort(arr){
var len=arr.length
for(var gap=Math.floor(len/2);gap>0;gap=Math.floor(gap/2)){
for(var i=gap;i<len;i++){
var j=i
var current=arr[i]
while(j-gap>=0&& current<arr[j-gap]){
arr[j]=arr[j-gap]
j=j-gap
}
arr[j]=current
}
}
return arr
}
console.log(shellSort([50,70,60,80,61,84,83,88,87,99]))
二分查找
function binarySearch(arr,target){
let left=0
let right =arr.length-1
while(left<=right){
let mid=Math.floor((left+right)/2)
if(arr[mid]===target){
return mid
}else if(arr[mid]<target){
left=mid+1
}else{
right=mid-1
}
}
return -1
}
const myArray = [1, 3, 5, 7, 9, 11]
console.log(binarySearch(myArray, 7))