逆序(inversion)
一个序列中存在元素对,顺序与理想顺序相反
注意事项
-
算法的空间复杂度,即便graph本身要花费V+E,但是DFS是V,只考虑自身要用的。
Selection Sort(选择排序)
方法
不断选择最值元素,交换到最前面
时间复杂度(N*2)
Heap Sort (堆排序)
方法
-
进行堆化,在原数组进行操作,使他满足堆的特性。
-
进行排序,delete开头的,删除size,后面的就是sorted array
时间复杂度(NlogN)
底向上堆化的时间复杂度是 O(n)。虽然每次向下调整的时间复杂度是 O(logn),但由于大部分节点都在树的底层,因此总的调整次数相对较少,导致整体复杂度为 O(n)。这是因为大部分非叶子节点较少,只有少数节点需要进行多次调整。
空间复杂度 (1)
Merge Sort
方法
分解(Divide):Mergesort 每次将数组分成两半,直到每个子数组只包含一个元素。这个过程形成了一个递归树,每一层的深度为 nlogn,因为每次都将数组分成两半。
合并(Conquer):在每一层中,需要将所有的子数组合并成一个有序数组。合并两个已排序的子数组的时间复杂度是 O(n),因为需要遍历每个元素。
时间复杂度(NlogN)
空间复杂度(N)
Insertion Sort
方法
两个指针,从后一直往前对比,然后插入到正确的位置
很适合只有很少的逆序的排序
时间复杂度(N+K逆序数)
大于N,虽然不用动,但是仍需要查看
小于N*2,一个三角形,swap很多次