使用C++实现快速排序算法
快速排序基于分治法,平均时间复杂度O(n log n),在实际应用中广泛使用。其核心思想为:选择基准元素(pivot),将数组分区为小于和大于基准的两部分,再递归排序子数组。分区采用Lomuto方案,以最右侧元素为基准,通过遍历数组将小于基准的元素移至左侧,最后交换基准至最终位置(i+1处)。 C++实现包含分区函数(partition)和递归排序主函数(quickSort),分区操作在原数组完成,实现原地排序。递归终止条件为子数组长度≤1(left≥right)。时间复杂度平均O(n log n),最坏O(n²)(如已排序数组选最左/右为基准),可通过随机选基准优化。 关键特性:原地排序,无需额外空间;递归终止条件明确;平均高效,最坏情况可优化。快速排序是面试与开发高频算法,掌握其分区逻辑和递归思想是理解高效排序的关键。
阅读全文使用Python实现插入排序算法
本文介绍插入排序算法,核心思想是将元素逐个插入已排序子数组,类似整理扑克牌时的有序插入。基本思路:从数组第二个元素开始,将每个元素视为待插入元素,与已排序子数组从后往前比较,找到合适位置后插入,确保子数组始终有序。 以Python实现为例,外层循环遍历待插入元素(从索引1开始),内层循环通过while比较并后移元素,用临时变量temp保存当前元素,最终插入到正确位置。代码为原地排序,仅用一个临时变量,空间复杂度O(1)。 时间复杂度:最好情况(数组已排序)O(n),最坏情况(逆序)O(n²);空间复杂度O(1)。适用于小规模数据或基本有序数据,实现简单且稳定。
阅读全文