以从小到大顺序排列为例
1,快速排序
思想(分治):先在数组中选取一个基准数,然后将小于这个基准的数放在基准左边,将大于基准的数放在右边,这时这个基准的位置就是他最终应该在的位置,然后对于左边的序列和右边的序列继续进行以上操作(递归),最终的得到排序好的序列
function quickSort(arr) {
if (arr.length < 1)
return arr
var index = Math.floor(arr.length / 2)
var center = arr.splice(index, 1)[0]
var left = [], right = []
arr.forEach((item) => {
if (item < center) {
left.push(item)
} else {
right.push(item)
}
})
return ([...quickSort(left), center, ...quickSort(right)])
}
var arr = [2, 4, 2, 1, 46, 2, 3, 56, 8, 5, 4, 0]
var res = quickSort(arr)
console.log(res);
2,选择排序
思想:在数组中,选择最小的放在第一个位置,选择第二小的放在第二个位置…直到最后一个位置
function selectSort(arr) {
for (let i = 0; i < arr.length; i++) {
var minIndex = i
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j
}
}
var t = arr[i]
arr[i] = arr[minIndex]
arr[minIndex] = t
}
return arr
}
var arr = [2, 4, 2, 1, 46, 2, 3, 56, 8, 5, 4, 0]
var res = selectSort(arr)
console.log(res);
3,冒泡排序
思想:其原理就是从把一个数组中的每一个数从前往后依次进行比较,然后根据大小交换位置,每一轮的比较都确定出一个当轮比较的最大值,最终实现数组的大小排序。
function bubbleSort(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
var t = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = t
}
}
}
return arr
}
var arr = [2, 4, 2, 1, 46, 2, 3, 56, 8, 5, 4, 0]
var res = bubbleSort(arr)
console.log(res);