Hoare分区快速排序Comparator出现Cannot read property of undefined错误
问题原因分析
这是Hoare分区方案的特性导致的,核心问题出在指针越界访问undefined上:
- Hoare分区的核心逻辑是:左指针从左向右查找「不小于基准值」的元素,右指针从右向左查找「不大于基准值」的元素,找到后交换两者,直到左右指针相遇。
- 当你的比较器使用
>=时,若数组中存在多个与基准元素属性值相等的Participant对象,左指针会持续向右移动(因为每个元素的属性都满足>=基准的条件),直到左指针超出数组的最大索引(比如数组长度为n,左指针走到n的位置),此时arr[left]就是undefined,访问它的solved或fine属性自然会抛出TypeError。 - 改成
>后,当元素属性值等于基准时,左指针不会继续移动(因为不满足>的判断条件),避免了指针越界到数组范围之外,也就不会访问到undefined的对象。
你确认所有Participant对象的属性不为undefined,但忽略了指针越界后访问的是数组不存在的位置(对应值为undefined),这才是报错的根源,和对象本身的属性无关。
内容的提问来源于stack exchange,提问作者Isidore
相关产品推荐
相关产品推荐

