一、冒泡排序
时间复杂度:O(n2)
代码:
1 var arr = [0, 1, 2, 6, 7, 10, 3] 2 // 冒泡排序 3 function bubbleSort(arr) { 4 for (let i = 0; i < arr.length - 1; i++) { // 控制循环次数 5 let isDone = true 6 for (let j = 0; j < arr.length - i - 1; j++) { // 无序区域的循环次数 7 if (arr[j] > arr[j + 1]) { 8 isDone = false 9 let temp = arr[j] 10 arr[j] = arr[j + 1] 11 arr[j + 1] = temp 12 } 13 } 14 if (isDone === true) { 15 // 优化冒泡排序,当中途已排好序时,不再继续尝试排序 16 return arr 17 } 18 } 19 } 20 bubbleSort(arr)
冒泡排序动态图演示:
二、选择排序
时间复杂度:O(n2)
代码:
1 // 选择排序 2 let arr = [3, 2, 5, 3, 6, 1, 8, 0] 3 4 function selectSort(arr) { 5 for (let i = 0; i < arr.length - 1; i++) { // 遍历次数 6 let minIndex = i // 假设起始索引对应的数值为最小 7 let temp 8 for (let j = i; j < arr.length; j++) { // 无序区域区域遍历次数 9 if (arr[minIndex] > arr[j + 1]) { 10 minIndex = j + 1 // 选出无序区域最小的索引 11 } 12 } 13 temp = arr[minIndex] // 存储最小的索引,并在下方进行交换 14 arr[minIndex] = arr[i] 15 arr[i] = temp 16 } 17 return arr 18 } 19 selectSort(arr)
选择排序动态图演示:
十大经典排序算法的图文演示
这里极力推荐一位大佬写的一篇博客:https://www.cnblogs.com/onepixel/p/7674659.html