排序内容大总结,堆结构,比较器,计数排序,基数排序

快排的空间复杂度O(logN)最差情况是O(N)

堆结构

完全二叉树,从左向右依次变满 i位置上的左孩子i*2+1 右孩子 i*2+2 父节点(i-1)/2

大根堆(每一个节点为头的子树,每一个子树的最大值都是头节点的值)

小根堆(相反)

heapinsert过程,新进数组的值和父节点不断比较,如果大于父节点,转换位置

heapify过程 heapSize防止越界

int largest = left + 1 < heapSize && arr[left+1] > arr[left] ? left +1 : left 先判断右孩子有没有越界,如果没有越界且值比左孩子大,则给largest赋值右孩子,否则为左孩子的值。

完全二叉树如果有N个节点的高度logN,用户如果让返回最大数,然后依旧要形成大根堆,代价就是logN级别的,很低

HeapSort,0位置的数和最后一个数做交换,heap Size--,最大数可以踢出树结构,然后改变结构,变成最大堆,继续这个操作

小根堆的用法

这个堆结构可以直接用priorityQueue ,黑盒不支持已经形成堆的东西,你用很轻的代价去修改里面的结构,只支持给黑河一个数,他返给你一个数,如果只是想要这个功能可以用黑盒,如果有什么特殊要求,需要自己写。

比较器(非常好用)

不基于比较的排序

计数排序:

要根据数据状况来定制,

基数排序:根据有的所有数字安排"桶",看最大的数字是几位,其他数字前面补0补齐,然后从各位开始入桶,再按顺序出桶,再从十位数上看,依次入桶,依次出桶,百位数,依次入桶,依次出桶,最终就得到了排号的数列。

创建一个词频表count

count【 】

0 1 2 3 4 5 6 7 8 9

个位数是哪个就进到哪个里面,当出现重复的,就加一

排序算法的稳定性

用处

先按照物品的价格由小到大,再按照好评率由小到大,最终可以得到一个物美价廉的

排序

选择排序(做不到稳定性)

冒泡排序,相邻相等的时候不让换(可以保持稳定性)

插入排序(相等的时候不换为,有稳定性)

归并排序(两个合并的啥时候,当左右两侧有相等的时候,先拷贝左侧的就可以做到稳定性)

快排(做不到稳定性)

堆排很轻易的就能做到破坏稳定性,在形成堆的时候就会破坏

计数排序和基数排序都是可以做到稳定性的(入桶出桶都是可以维持的)

时间 空 稳

选择 O(N^2) O(1) ×

冒泡 O(N^2) O(1) √

插入 O(N^2) O(1) √

归并 O(N*logN) O(N) √

快排 O(N*logN) O(logN) ×

堆 O(N*logN) O(1) ×

综合排序,利用各自的又是,让整体更快,时间变得更少

相关推荐
大江东去浪淘尽千古风流人物38 分钟前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
独好紫罗兰1 小时前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
wuhen_n1 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
努力学算法的蒟蒻1 小时前
day79(2.7)——leetcode面试经典150
算法·leetcode·职场和发展
2401_841495641 小时前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
AC赳赳老秦1 小时前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek
独好紫罗兰2 小时前
对python的再认识-基于数据结构进行-a002-列表-列表推导式
开发语言·数据结构·python
2401_841495642 小时前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归
budingxiaomoli2 小时前
优选算法-字符串
算法
qq7422349842 小时前
APS系统与OR-Tools完全指南:智能排产与优化算法实战解析
人工智能·算法·工业·aps·排程