12.9 - 排序数组 && 野指针和空指针的区别

目录

1.排序数组

a.核心思想

b.思路

c.步骤

2.野指针和空指针的区别


1.排序数组

912. 排序数组 - 力扣(LeetCode)https://leetcode.cn/problems/sort-an-array/

cpp 复制代码
class Solution {
public:
    int partition(vector<int>& arr, int low, int high) {
        int pivot_idx = low + rand() % (high - low + 1);
        swap(arr[pivot_idx], arr[high]);
        int pivot = arr[high];
        int i = low - 1;
        for (int j = low; j < high; j++) {
            if (arr[j] < pivot) {
                i++;
                swap(arr[i], arr[j]);
            }
        }
        swap(arr[i + 1], arr[high]);
        return i + 1;
    }
    // 快速排序主函数
    void quick_sort(vector<int>& arr, int low, int high) {
        if (low < high) {
            int pi = partition(arr, low, high);
            quick_sort(arr, low, pi - 1);
            quick_sort(arr, pi + 1, high);
        }
    }
    vector<int> sortArray(vector<int>& nums) {
        quick_sort(nums, 0, nums.size() - 1);
        return nums;
    }
};

a.核心思想

采用随机化 快速排序实现高效排序,通过随机选择枢轴元素避免最坏时间复杂度,实现原地分区操作,满足O(n log n)时间复杂度要求,同时保持低空间复杂度特性。

b.思路

分治 **策略:**将数组分割为独立子问题递归解决

**② 随机枢轴:**通过随机选择基准值避免已排序数组导致的性能退化

**③ 原地分区:**通过元素交换实现O(1)额外空间占用

递归 **优化:**仅对非空子数组进行递归调用

c.步骤

① 分区操作:

  • 随机选枢轴:在[low, high]范围内随机选择索引作为枢轴

  • 枢轴归位:将枢轴元素交换至数组末尾

  • 元素重排:遍历数组,将小于枢轴的元素移到左侧

  • 枢轴定位:将枢轴交换到正确位置,返回其索引

递归 排序:

  • 基准条件:子数组长度大于1时继续递归

  • 分治处理:对枢轴左侧和右侧子数组分别递归排序

③ 入口函数:

  • 启动排序:调用快速排序函数处理整个数组

  • 返回结果:返回排序后的数组

2.野指针和空指针的区别

野指针 空指针
定义 未被初始化,或指向的内存已被释放/无效的指针,其值不确定且可能危险。 明确被赋值为 nullptr(C++11 起)或 NULL 的指针,表示"不指向任何有效对象"。
成因 未初始化、内存释放后未置空,或指针越界访问。 主动赋值为空。
危害 解引用可能导致未定义行为(如数据损坏、隐蔽崩溃),难以调试。 解引用时通常直接崩溃(如 *p 会触发段错误),易排查。
规避方法 初始化指针、释放内存后立即置空、避免返回局部变量指针。 显式初始化为 nullptr,使用前检查。

希望这些内容对大家有所帮助!

感谢大家的三连支持!

相关推荐
Σίσυφος190018 分钟前
PCL法向量估计 之 RANSAC 平面估计法向量
算法·机器学习·平面
xhbaitxl24 分钟前
算法学习day39-动态规划
学习·算法·动态规划
I_LPL25 分钟前
day23 代码随想录算法训练营 回溯专题2
算法·hot100·回溯算法·求职面试
智者知已应修善业27 分钟前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法
Trouvaille ~31 分钟前
【Linux】应用层协议设计实战(一):自定义协议与网络计算器
linux·运维·服务器·网络·c++·http·应用层协议
CSCN新手听安37 分钟前
【linux】高级IO,I/O多路转接之poll,接口和原理讲解,poll版本的TCP服务器
linux·运维·服务器·c++·计算机网络·高级io·poll
CSCN新手听安43 分钟前
【linux】网络基础(三)TCP服务端网络版本计算器的优化,Json的使用,服务器守护进程化daemon,重谈OSI七层模型
linux·服务器·网络·c++·tcp/ip·json
m0_7369191043 分钟前
C++中的委托构造函数
开发语言·c++·算法
小小小小王王王1 小时前
洛谷-P1886 【模板】单调队列 / 滑动窗口
c++·算法
PPPPPaPeR.1 小时前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法