由于某种原因,我无法正确排序此代码。我正在更换订单号以便生成有序列表。
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);
这里的while循环应该在数组排序时停止,但这种情况永远不会发生。
答案 0 :(得分:2)
自此代码以来,你有一个无限循环:
for (i = 0; i < length; i++)
{
var tempValue = array[i];
array[i] = array[i+1];
array[i+1] = tempValue;
}
不排序数组。
为什么不使用array.prototype.sort呢?
答案 1 :(得分:1)
试试这个,
仅当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]
(幸运的是,这不会影响排序,但最好是正确的反正)。
答案 2 :(得分:0)
for (i = 0; i < length; i++)
{
var tempValue = array[i];
array[i] = array[i+1];
array[i+1] = tempValue;
}
这里你永远不会检查相关值是否被排序.....左边的值大于正确的值....(虽然我正在考虑排序函数的for循环中的长度为数组长度)
查看一个简单的冒泡排序算法然后尝试.....
在C here
中引用此算法