排序算法的分类
什么是线性时间 or 非线性时间
在计算复杂性理论,一个被称为线性时间或 Ο(n)时间的算法,表示此算法解题所需时间与输入资料的大小成正比,通常以n表示。换句话说,执行时间与输入资料大小为线性比例。例如将一列数字加总的所需时间,正比于串列的长度。
各大排序算法时间、空间复杂度图表:
交换排序
冒泡排序
从第一个元素开始,一次比较两个元素,将最大的元素排在右边,依次向右进行比对。每比对完一轮,都会将当前数组的最大元素排列在最右边,下一轮需要进行排序的个数就少一个。以此类推,直到需要进行排序的个数为1。
/**
* @description: 冒泡排序
* @param {Array}
* @return {}
*/
function Bubbling(array) {
let temp = null;
for (let i = 0; i < array.length-1; i++) {
for (let j = 0; j < array.length-i-1; j++) {
if (array[j] > array[j+1]) {
temp = array[j+1]
array[j+1] = array[j]
array[j] = temp
}
}
}
}
let Array = [6, 2, 3, 1, 4, 5]
Bubbling(Array)
console.log(Array) // [ 1, 2, 3, 4, 5, 6 ]
选择排序
意指有选择性地,在待排序的元素中找到最小的元素,将其放置在第一个位置。接下来 N 轮都找出当前待排序序列中最小的元素,放在 N+1 个位置。当 N = length - 1,排序完成。
/**
* @description: 选择排序
* @param {Array}
* @return {}
*/
function Select(array) {
for (let i = 0; i < array.length-1; i++) {
let minIndex = i
for (let j = i; j < array.length-1; j++) {
if (array[j+1] < array[minIndex]) {
minIndex = j+1
}
}
let temp = array[i]
array[i] = array[minIndex]
array[minIndex] = temp
}
}
let Array = [4, 19, 3, 18, 19, 2, 36, 27, 44, 46, 38, 47, 50, 48]
Select(Array)
console.log(Array)