请帮我排查JavaScript版QuickSort算法错误——输出异常且元素缺失
问题分析与修复
你的快速排序代码存在两个核心问题,直接导致输出出现单独的price数值且丢失完整对象:
- 基准值类型错误:你将
array[0].price(纯数值)赋值给了pivot,但实际应该保留完整的数组元素(对象),否则concat时会把数值直接插入结果数组,而非原对象。 - 基准元素未正确纳入结果:循环从
i=1开始,原基准元素array[0]没有被加入left或right数组,而你concat的是pivot数值,导致原对象丢失,取而代之的是它的price值。
修复后的代码
function quicksort(array) { if (array.length <= 1) { return array; } // 取完整对象作为基准,而非仅price属性 var pivot = array[0]; var left = []; var right = []; for (var i = 1; i < array.length; i++) { // 比较当前元素与基准对象的price属性 array[i].price < pivot.price ? left.push(array[i]) : right.push(array[i]); } // 将基准对象(而非数值)合并到排序后的数组中 return quicksort(left).concat(pivot, quicksort(right)); }; var unsorted = [{ title: "JavaScript", price: 25 }, { title: "PHP", price: 15 }, { title: "Java", price: 30 }, { title: "Elixir", price: 50 }, { title: "Go", price: 45 }, { title: "Python", price: 20 }, { title: "CSS", price: 10 }, ]; var sorted = quicksort(unsorted); console.log('Sorted array', sorted);
修复后输出
Sorted array [ { title: 'CSS', price: 10 }, { title: 'PHP', price: 15 }, { title: 'Python', price: 20 }, { title: 'JavaScript', price: 25 }, { title: 'Java', price: 30 }, { title: 'Go', price: 45 }, { title: 'Elixir', price: 50 } ]
内容的提问来源于stack exchange,提问作者Guido Aguiar
相关产品推荐
相关产品推荐

