为什么这个 while 循环不停止?
Why doesn't this while loop stop?
For some reason I cannot get this code to properly sort. I am replacing out of order numbers in order to make an ordered list.
var unsortedArray = new Array(1,2,5,4);
var sortedArray = unsortedArray;
var tempValue = 0;
function isSorted(array)
{
for (i = 0; i < array.length; i++)
{
if (array[i] > array[i+1])
{
return false;
}
}
return true;
}
function sort(array)
{
while (isSorted(array) == false)
{
for (i = 0; i < length; i++)
{
var tempValue = array[i];
array[i] = array[i+1];
array[i+1] = tempValue;
}
}
}
sort(sortedArray);
document.write(sortedArray);
The while loop here is supposed to stop when the array is sorted, but that never happens.
你有一个无限循环,因为这段代码:
for (i = 0; i < length; i++)
{
var tempValue = array[i];
array[i] = array[i+1];
array[i+1] = tempValue;
}
不对数组进行排序。
为什么不使用 array.prototype.sort 呢?
试试这个,
仅当 a[n]
小于 a[n-1]
时才会交换元素。
while (isSorted(array) == false)
{
for (i = 0; i < length-1; i++)
{
if(array[i]>array[i+1]){
var tempValue = array[i];
array[i] = array[i+1];
array[i+1] = tempValue;
}
}
它还将 for 循环更改为 for(var i = 0; i < length - 1; i++)
。
否则,在数组的末尾,您将访问未定义的 array[length]
(幸运的是,这不会影响排序,但无论如何最好是正确的)。
for (i = 0; i < length; i++)
{
var tempValue = array[i];
array[i] = array[i+1];
array[i+1] = tempValue;
}
在这里你永远不会检查相邻值是否排序......左边的值大于右边的值......(虽然我正在考虑排序函数的for循环中的长度是数组长度)
回顾一个简单的冒泡排序算法,然后尝试......
在 C 中引用此算法 here
For some reason I cannot get this code to properly sort. I am replacing out of order numbers in order to make an ordered list.
var unsortedArray = new Array(1,2,5,4);
var sortedArray = unsortedArray;
var tempValue = 0;
function isSorted(array)
{
for (i = 0; i < array.length; i++)
{
if (array[i] > array[i+1])
{
return false;
}
}
return true;
}
function sort(array)
{
while (isSorted(array) == false)
{
for (i = 0; i < length; i++)
{
var tempValue = array[i];
array[i] = array[i+1];
array[i+1] = tempValue;
}
}
}
sort(sortedArray);
document.write(sortedArray);
The while loop here is supposed to stop when the array is sorted, but that never happens.
你有一个无限循环,因为这段代码:
for (i = 0; i < length; i++)
{
var tempValue = array[i];
array[i] = array[i+1];
array[i+1] = tempValue;
}
不对数组进行排序。
为什么不使用 array.prototype.sort 呢?
试试这个,
仅当 a[n]
小于 a[n-1]
时才会交换元素。
while (isSorted(array) == false)
{
for (i = 0; i < length-1; i++)
{
if(array[i]>array[i+1]){
var tempValue = array[i];
array[i] = array[i+1];
array[i+1] = tempValue;
}
}
它还将 for 循环更改为 for(var i = 0; i < length - 1; i++)
。
否则,在数组的末尾,您将访问未定义的 array[length]
(幸运的是,这不会影响排序,但无论如何最好是正确的)。
for (i = 0; i < length; i++)
{
var tempValue = array[i];
array[i] = array[i+1];
array[i+1] = tempValue;
}
在这里你永远不会检查相邻值是否排序......左边的值大于右边的值......(虽然我正在考虑排序函数的for循环中的长度是数组长度)
回顾一个简单的冒泡排序算法,然后尝试......
在 C 中引用此算法 here