算法
白菜彩虹怪鸟
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
排序——快速排序
空间复杂度由时间复杂度决定因为函数调用需要申请函数栈: 当选取中位数作为基准值时递归调用log(n+1)次函数,故其空间复杂度为0(logn);若每次选取中位数当做基准值,则n个数会递归log(n+1)次,即会进行log(n+1)次三色旗问题,每处理一次三色旗问题时间复杂度为0(n),所以最好时间复杂度为O(nlogn);每次选取最值作为基准值,则n个数会递归n次,即会进行n次三色旗问题,每处理一次三色旗问题时间时间复杂度为0(n),所以最好时间复杂度为 O(n*n)=0(n2);原创 2024-05-05 17:03:21 · 532 阅读 · 2 评论 -
排序——堆排序
n个节点的完全二又树有 log 2(n+1)层创建最大堆过程中,两两元素相互比较共比较 n-1次,在交换过程中可能破坏某个最大堆结构,我们可以假设共调整k次可以恢复最大堆结构,故建堆过程时间复杂度为 O(n+k)=O(n)。每个根节点最大下降(l0g2(n+1))-1层,每下降一层需比较两次,假设每个根节点都下降到最底层,则下降一个根节点的时间复杂度为 O(2。将堆顶元素与待排序数组(假设待排序的数据数量为nums)最后一个元素进行交换,swap(&vec[0], &vec[nums-1]);原创 2024-05-04 20:31:44 · 457 阅读 · 0 评论 -
排序——归并排序(+链表排序)
归并排序的效率是比较高的,设数列长为N,将数列分开成小数列一共要logN步,每步都是一个合并有序数列的过程,时间复杂度可以记为O(N),故一共为O(N*logN)首先将待排序的数组转换为单链表,然后使用归并排序对链表进行排序,最后输出排序后的结果。将两个有序的数组组合成一个数组(单个元素可看作有序数组)将数组分解,当分解成单个元素为一组的时候才是组内的有序。,归并排序需要一个与原数组相同长度的数组做辅助来排序。将两两有序的数组进行合并,重复此步骤,直到排序完成。原创 2024-04-22 17:27:55 · 510 阅读 · 0 评论
分享