let arr = [3, 15, 36, 25, 27, 4, 50, 49]
1. 冒泡排序
// 冒泡排序 首先确认循环次数
for (let i = arr.length - 1; i > 0; i--) {
for(let j=0;j<i;j++){
let temp = arr[j]
if(arr[j]>arr[j+1]){
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
2. 快速排序
// 快排 递归 比较值为中位数
const quickSort = function (arr) {
if (arr.length <= 1) return arr
let pivotIndex = Math.floor(arr.length / 2)
let pivotValue = arr.splice(pivotIndex, 1)[0]
let left = (right = [])
for (let i = 0; i < arr.length; i++) {
if (arr[i] > pivotValue) {
right.push(arr[i])
} else {
left.push(arr[i])
}
}
return quickSort(left).concat([pivotValue],quickSort(right))
}
3. 计数排序
// 哈希 数组组合计数排序
function countSort(arr){
let hashTable = {}
let resArr = []
// 记录数据和数据对应的次数
for(let i = 0; i < arr.length-1; i++){
if(!(arr[i] in hashTable)){
hashTable[arr[i]] = 1
} else {
hashTable[arr[i]] += 1
}
}
// 按顺序添加到res中
let index = 0
for (let j = min; j <= max; j++){
while(hashTable[j] > 0){
resArr[index++] = j
hashTable[j]--
}
}
return resArr
}
4. 插入算法
// 插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序
function insetSort (arr) {
for (let i = 1; i < arr.length; i++) {
j = i
temp = arr[i]
while (j > 0 && arr[j - 1] > temp) {
arr[j] = arr[j - 1]
j--
}
arr[j] = temp
}
return arr
}
5. 选择排序
function selSort(arr){
for(let i = 0; i < arr.length; i++){
let minIndex = i
// 筛选出最小值
for(let j = i; j < arr.length; j++){
if(arr[j] < arr[minIndex]){
minIndex = j
}
}
// 交换位置
let temp = arr[minIndex]
arr[minIndex] = arr[i]
arr[i] = temp
}
return arr
}
6. 二分查找
function binSearch(arr,value){
let left = 0
let right = arr.length-1
while(left<right){
let mid = Math.floor((left+right)/2)
if(value==arr[mid]){
return mid
} else if(value>arr[mid]){
left = mid +1
} else {
right = mid -1
}
}
return
}