Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
气泡排序javascript代码不需要太多解释_Javascript_Bubble Sort - Fatal编程技术网

气泡排序javascript代码不需要太多解释

气泡排序javascript代码不需要太多解释,javascript,bubble-sort,Javascript,Bubble Sort,我写泡泡排序程序是为了好玩,但我不明白的是 如果您记录每个“i”循环的arr,那么就可以看到这一行j为什么起作用 var-arr=[3,5,4,7,8,9,30,0,1]; 函数气泡_排序(arr){ var len=阵列长度, i、 j,停止; 对于(i=0;i

我写泡泡排序程序是为了好玩,但我不明白的是
如果您记录每个“i”循环的arr,那么就可以看到这一行
j为什么起作用

var-arr=[3,5,4,7,8,9,30,0,1];
函数气泡_排序(arr){
var len=阵列长度,
i、 j,停止;
对于(i=0;i
(9) [3,4,5,7,8,9,0,-1,30]

(9) [3,4,5,7,8,0,-1,9,30]

(9) [3,4,5,7,0,-1,8,9,30]

(9) [3,4,5,0,-1,7,8,9,30]

(9) [3,4,0,-1,5,7,8,9,30]

(9) [3,0,-1,4,5,7,8,9,30]

(9) [0,-1,3,4,5,7,8,9,30]

(9) [-1,0,3,4,5,7,8,9,30]

(9) [-1,0,3,4,5,7,8,9,30]

(9) [-1,0,3,4,5,7,8,9,30]

每一个i循环,它都会将第i个大数字移到底部,因此最后一个i数字是稳定的。

考虑数组(按递增顺序排序):

使用
i=0运行内部循环后,您将获得:

[3,2,1,4]

现在,
i=1

再次重复该过程,在下一次迭代中,当
i=1
时,您将得到:

[2,1,3,4]

现在,
i=2

再次,在
i=2
处重复循环,得到:

[1,2,3,4]

现在
i=3

请注意,粗体数字是如何按顺序排序的

这里我们有一个用于外循环的语句(即对于外循环的每次迭代都适用的语句),即数组的最后
i
项是按排序顺序排列的。或者,从另一个角度来看,数组中
[0,…length-i)
中的所有项都没有排序,因此索引
length-i
及以后的项都是按顺序排序的

换句话说,当您查看数组时,您可以看到在外部循环的每次迭代之后,数组中
length-i,…,length
中的所有项都是按排序顺序排列的,因此无需重新排序/检查它们


因此,提供
len-i
可以防止您重新检查已排序的项目,因为您知道它们不需要更改。

这是因为每次对最后一个元素进行排序。每次迭代后,您都会发现最后一个元素位于正确的位置(对于第0次迭代-最后一个元素处于正确位置,对于第1次迭代-最后2个元素处于正确位置,依此类推)因此,每次我们循环使用len-i元素。

负号i将解释这样一个事实,即在第一次对数组进行完整迭代后,最右边的元素将位于正确的位置。因此,您以后不必再次尝试对其进行排序。这就是为什么您在那里有负号i。

何处你删除了
i
?你可以从jIf中删除i如果你将保留
-i
,那么迭代次数将很低,因为你已经对元素进行了排序。如果你删除了,那么它将对已排序的元素执行不需要的操作。你应该保留
-i
假设你的数组有5个元素,那么第一次你将对一个元素进行排序。现在你已经完成了要对4个元素执行操作,然后3个元素,然后2个元素,然后1-i停止不需要的循环迭代(仅此而已:)我不明白。@新手希望它显示外部循环的10次迭代,但您的内部循环在排序后将停止运行。当我使用-i时,我得到10个console.log行(迭代)当我移除的时候也是一样-我知道了,它只是显示了整个arr,实际上,循环的气泡是10,9,8,7…1
var arr=[3,5,4,7,8,9,30,0,-1];
function bubble_Sort(arr){

var len = arr.length,
    i, j, stop;

for (i=0; i < len; i++){
    for (j=0; j<len-i;  j++){
        if (arr[j] > arr[j+1]){
            var temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;

        }
    }
}

return arr;
}
console.log(bubble_Sort(arr));
var arr=[3,5,4,7,8,9,30,0,-1];
function bubble_Sort(arr){

var len = arr.length,
    i, j, stop;

for (i=0; i < len; i++){
    for (j=0; j<len-i;  j++){
        if (arr[j] > arr[j+1]){
            var temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;

        }
    }
    console.log(arr)
}

return arr;
}
console.log(bubble_Sort(arr));
[4, 3, 2, 1]