You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组未找到目标元素时while循环执行问题及快排优化疑问

问题一:数组未找到目标元素时while循环的执行行为

给出代码示例:

int arr[] = {1,2,3,4,5};
int i = 0;
while(arr[i]<=6){
  i++;
}

当数组中没有大于6的元素时,这个循环不会在数组末尾自动停止,也不一定会无限递增:

  • 数组arr的有效下标是0到4(共5个元素),当i递增到5时,arr[5]属于数组越界访问,这部分内存的内容是未定义的(可能是随机值,也可能是其他变量的内容)。
  • 如果越界后访问到的内存值仍然<=6,i会继续递增;如果某次访问到的值>6,循环会停止;但更可能的情况是,越界访问到了程序不允许操作的内存区域,直接触发**段错误(Segmentation Fault)**导致程序崩溃。
  • C语言不会自动检查数组下标是否越界,不存在“自动在数组末尾停止”的机制。

问题二:快速排序partition函数的越界问题

原partition函数中的这段循环:

while (arr[i] <= pivot)
{
    i++;
}

当遍历到数组末尾仍未找到大于pivot的元素时,i会一直递增到high + 1,此时访问arr[i]属于数组越界访问,会触发未定义行为(可能导致程序崩溃、排序结果错误等)。

必须添加i<=high的条件,修改后的循环应为:

while (arr[i] <= pivot && i <= high)
{
    i++;
}

原因是:

  • 添加i<=high后,i的最大值只会到high,确保始终访问数组的有效下标范围(low到high)。
  • 当所有元素都小于等于pivot时,i最终会变成high+1,但此时循环条件i<=high不满足,循环停止,后续代码不再访问arr[i],不会触发越界问题。

内容的提问来源于stack exchange,提问作者Mohammad Qasim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 14:36:19