1、冒泡排序(最基础的排序)O(n^2)
//冒泡排序核心点 俩个for循环嵌套 第一个趟数 相当于length-1 第二个每趟比较的时间是递减的
//相邻的俩个相比 j和j+1相比
function bubble(arr) {
//遍历数组
for (var i = 1; i < arr.length; i++) {
//判断对应的没有比较的值 没有确定位置的值
for (var j = 0; j < arr.length - i; j++) {
//相邻的俩个进行比较
if (arr[j] > arr[j + 1]) {
//换位置
var temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
return arr
}
var arr = [10, 18, 58, 78, 48, 38]
console.log(bubble(arr));
2、选择排序(选择最大值 或者最小值的下标 进行比较的排序)
function selecter(arr) {
//遍历数组
for (var i = 0; i < arr.length; i++) {
var min = i //记录最小下标 默认当前的i值
for (var j = i + 1; j < arr.length; j++) { //遍历后面的内容
//如果当前值比最小值还小
if (arr[j] < arr[min]) {
//记录一下这个下标
min = j
}
}
//判断当前最小下标是否为开始的默认下标 不是就换位置
if (min != i) {
//换位置
var temp = arr[min]
arr[min] = arr[i]
arr[i] = temp
}
}
return arr
}
var arr = [18, 58, 68, 38, 78, 28, 8]
console.log(selecter(arr));
3、快速排序(在数据量低于十万内最快的 在数据量不多的情况下最快的 是冒泡排序的进阶)二分O(nLogn)
function quick(arr) {
if (arr.length <= 1) {
return arr
}
//定义左边的数组 右边的数组 基数
var left = []
var right = []
var mif = arr[0]
//遍历数组
for (var i = 1; i < arr.length; i++) {
arr[i] > mid ? right.push(arr[i]) : left.push(arr[i])
}
return quick(left).concat([mid], quick[right])
}