堆排序:堆排序如何实现?时间复杂度详解

堆排序是利用“堆”(特殊完全二叉树)实现的排序算法,常用大顶堆(父节点≥子节点)。核心思想是“先建堆,再排序”:先将数组转为大顶堆(堆顶为最大值),再反复交换堆顶与末尾元素,调整剩余元素为堆,完成排序。 堆的基本概念:完全二叉树结构,数组中索引i的左子节点2i+1、右子节点2i+2、父节点(i-1)//2。大顶堆父≥子,小顶堆父≤子。 实现分两步:1.构建大顶堆:从最后非叶子节点开始,通过“堆化”(比较父与子节点,交换最大值并递归调整子树)确保大顶堆性质;2.排序:交换堆顶与未排序末尾元素,缩小堆规模后重复堆化,直至完成。 时间复杂度:构建堆O(n),排序过程O(n log n),总O(n log n),空间复杂度O(1)(原地排序)。特点是不稳定,适合大规模数据排序。

阅读全文
使用C++实现选择排序算法

选择排序是简单直观的排序算法,核心思想是每次从待排序元素中选出最小(或最大)元素,将其放入已排序序列末尾,直至完成排序。基本思路分四步:外层循环控制当前待排序起始位置,内层循环在剩余元素中寻找最小值,交换操作将最小值移至当前起始位置,重复直至所有元素排序完成。 以数组{64,25,12,22,11}为例,演示过程:i=0时找到最小值11交换到首位,i=1找到12交换到第二位,i=2找到22交换到第三位,i=3无需交换,最终数组排序完成。 C++代码通过两层循环实现:外层循环控制位置i,内层循环找最小值索引minIndex,交换arr[i]与arr[minIndex]。时间复杂度O(n²),空间复杂度O(1)。 选择排序实现简单、无需额外空间,适合小规模数据排序,是理解排序算法的基础。

阅读全文
使用C++实现插入排序算法

插入排序是简单直观的排序算法,核心思想是将元素逐个插入到已排序子数组的合适位置(类似整理扑克牌)。基本思路:从第二个元素开始,取当前元素,与前面已排序元素比较,若前面元素更大则后移,直到找到插入位置,插入后继续处理下一个元素。 实现时,外层循环遍历元素,内层循环用临时变量保存当前元素,通过比较移动前面元素腾出位置,最后插入。时间复杂度最坏O(n²),最好O(n),空间复杂度O(1)。适用于小规模数据或基本有序数据,优点是稳定、简单,是理解复杂排序的基础。

阅读全文
使用Java实现插入排序算法

插入排序是一种简单直观的排序算法,核心思想是将未排序元素逐个插入已排序部分的正确位置,类似整理扑克牌。适合小规模数据,实现简单。 基本思路:从第2个元素开始,将当前元素记为“待插入元素”,与已排序部分从后往前比较,若已排序元素更大则后移,直至找到插入位置,重复操作直至所有元素处理完毕。 Java实现需保存待插入元素,通过循环比较并后移元素完成插入。算法时间复杂度:最好O(n)(已排序),最坏和平均O(n²);空间复杂度O(1)(原地排序);稳定排序,适用于小规模数据或几乎有序数据。 其核心在于“逐步插入”,实现简单,稳定性和原地性使其在小规模排序中表现良好。

阅读全文