冒泡排序
每次交换两个元素的位置,一直交换到最大/最小的元素到了最前面/后面。下次循环舍弃掉这个元素的位置,继续交换一轮。
好处是可以设置一个标识,比如我的代码里的swap。如果一个循环之后没有交换位置,就意味着此时的允许已经正确了,不需要继续循环。
1 | function bubble(arr) { |
平均时间复杂度O(n²),最好情况O(n),最坏情况O(n²),空间复杂度O(1)。
选择排序
直接找出最大/最小的值,与最后/最前一个值交换。下次循环舍弃这个位置,继续找出最大/最小的值,交换。
直观容易理解,但哪怕已经排序完成仍旧需要继续走完全部的流程。
1 | function select(arr) { |
时间复杂度最好最坏都是O(n²),空间复杂度O(1)。
插入排序
直接插入排序
将待排序的元素插入到排好序的部分中,直到所有元素都插入进去。
1 | function directInsertion(arr) { |