如何在JavaScript中编辑参数数组的索引?及快速排序代码疑问
快速排序代码修复与数组索引操作说明
首先看你的快速排序代码,有几个需要修正的地方,我帮你整理并补全:
代码里的问题与修复
- 数组长度获取错误:JavaScript里数组的长度属性是
length,不是size,所以quicksort_setup里的var high = arr.size - 1;要改成var high = arr.length - 1; - 递归调用不完整:
quicksort_by_percent_filled函数里,分区后只递归了左半部分,缺少右半部分的递归调用quicksort_by_percent_filled(arr, pi + 1, high); - 缺失分区函数:快速排序的核心是
partition函数,用来将数组分成比基准小和大的两部分,你没提供这个函数,我帮你补上常用的实现。
修正后的完整代码
function test_quicksort(){ var arr = [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]; arr = quicksort_setup(arr); Logger.log(arr); } function quicksort_setup(arr){ var high = arr.length - 1; // 修正为length属性 arr = quicksort_by_percent_filled(arr, 0, high); return arr } function quicksort_by_percent_filled(arr, low, high){ if (low < high){ var pi = partition(arr, low, high); quicksort_by_percent_filled(arr, low, pi - 1); quicksort_by_percent_filled(arr, pi + 1, high); // 补全右半部分递归 } return arr; // 增加返回值确保数组传递正确 } // 补上分区函数(快速排序核心步骤) function partition(arr, low, high) { var pivot = arr[high]; // 选最后一个元素作为基准 var i = low - 1; // 记录比基准小的元素的最后位置索引 for (var j = low; j < high; j++) { if (arr[j] <= pivot) { i++; // 交换arr[i]和arr[j],把小元素移到左边 var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } // 将基准元素放到正确的中间位置 var temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; // 返回基准元素的最终索引 }
关于JavaScript中编辑数组索引的方法
在JavaScript里,数组是基于索引的集合,索引从0开始,操作起来很直接:
- 修改指定索引的元素:直接通过索引赋值即可,比如想修改第3个元素(索引为2):
var arr = [1,2,3]; arr[2] = 4; // 现在arr变成[1,2,4] - 删除指定索引的元素:
- 如果用
delete:delete arr[1],这时候数组变成[1, undefined, 4],数组长度不变,只是该位置的值变为undefined,会留下空洞。 - 如果想彻底删除并让后面元素前移,用
splice:arr.splice(1, 1),这时候数组变成[1,4],长度会自动减少。
- 如果用
- 在指定索引插入元素:用
splice方法,比如在索引1的位置插入5:arr.splice(1, 0, 5); // 现在arr变成[1,5,4] - 访问指定索引的元素:直接
arr[index],如果索引超出数组长度(比如数组长度是3,访问索引5),会返回undefined。
内容的提问来源于stack exchange,提问作者Leonardo the Vinchi
相关产品推荐
相关产品推荐

