我最近开始从雄辩的Javascript开始学习Javascript,并开始学习数据结构的方式。
有一个编码练习如下
编写两个函数,reverseArray和reverseArrayInPlace。第一个是reverseArray,它以一个数组作为参数,并生成一个具有相同元素的新数组。第二个是reverseArrayInPlace,它执行反向方法所做的工作:它修改作为参数的数组,以便反转其元素。两种方法都不能使用标准的反向方法。
这是我的密码
/*
* Create a Function reverseArray which returns a new array with the reversed array
* Create another Function reverseArrayInPlace() which modifies the ORiginal Array .
*/
function reverseArray(array) {
var reversed = [];
for (var i = 0; i < array.length; ++i) {
reversed[i] = array[array.length - (i + 1)];
}
return reversed;
}
function reverseArrayInPlace(array) {
var temp = 0;
for (var i = 0; i < array.length; ++i) {
temp = array[i];
array[i] = array[array.length - (i + 1)];
array[array.length - (i + 1)] = temp;
}
}
// Test Case
var ar = [10, 9, 8, 7, 6];
console.log(reverseArray(ar));
// Reverse the Array
reverseArrayInPlace(ar);
console.log(ar);
reverseArray()函数很好地完成了它的工作,返回了相反的数组,但是reverseArrayInPlace()不能工作。
我做错什么了?
发布于 2016-05-28 04:57:23
你要倒车两次。将array.length替换为array.ength/2
function reverseArrayInPlace(array){
var temp = 0;
for (var i =0; i < array.length/2; ++i){
temp = array[i];
array[i] = array[array.length - (i+1)];
array[array.length - ( i + 1 )] = temp;
}
}发布于 2016-05-28 05:15:16
Arun的回答显示了正确的代码来执行您想要的操作。
为什么您的代码不能像预期的那样工作,原因是您正在遍历整个数组,用它的镜像交换每个变量。但是,一旦您已经过半,您的代码行将设置镜像:
array[array.length - ( i + 1 )]正在将数组交换回原来的顺序。
在temp = array[i];行之后添加这一行:
console.log('Swapping ' + array[i] + ' with ' + array[array.length - (i+1)]);当您现在运行代码时,您应该立即了解为什么需要在中间点停止。
你应该看到:
Swapping 10 with 6
Swapping 9 with 7
Swapping 8 with 8
Swapping 9 with 7
Swapping 10 with 6现在,使用Arun的代码运行,您将看到:
Swapping 10 with 6
Swapping 9 with 7
Swapping 8 with 8
[ 6, 7, 8, 9, 10 ]讲得通?
发布于 2021-02-01 15:58:36
如果您不太担心优化代码和学习,那么还有另一种方法来对代码进行排序,那就是气泡排序。
function reverseArrayInPlace(arr){
for (let i=0;i< arr.length;i++){
for (let j=0;j< arr.length;j++){
if (arr[j]<arr[j+1]) {
let holder=arr[j]
arr[j]=arr[j+1]
arr[j+1]=holder
}
}
}
return arr;
}
console.log(reverseArrayInPlace([1,2,3,4,5])) //[5,4,3,2,1]如果你想反转一个像10,9,8,7,6这样的数组,只需在IF中将小于号翻转为大于号。
if(arr[j]>arr[j+1])https://stackoverflow.com/questions/37495310
复制相似问题