学习JavaScript中的气泡排序

148 阅读5分钟

假设我们有一个未经排序的数组,我们被要求以任何升序或降序对数组进行排序。泡点排序是最简单的排序算法之一,它比较两个并排的项目并对数组进行排序。有许多算法可用于对数组进行排序,如选择排序和合并排序等。在这篇文章中,我们将学习如何使用冒泡排序来对数组元素进行排序。

气泡排序的工作原理

假设我们想对我们的数组进行升序排序。它的工作原理是比较左边的索引和右边的索引。最初,它将比较数组中前两个索引的值。只有当第1个索引的值比第0个索引的值小时,第0个索引的值才会被替换。 接下来,它将比较第1个索引的值和第2个索引的值,以此类推。

假设我们有下面这个未排序的数组。

https://lh5.googleusercontent.com/lIATtPToelt3P3bL5cFY4mn8KsWG54Km-Xd8Pleib3HJwolk4l7dRkP8C_D3tYfNHFHmySOiFrR7gn0N3hFxubgpEKAm4tVB412cKyIZwCywgYIPNVGBNCDYFjFNeT9HyYeunjWa

我们知道,在数组中,索引是从0开始的。所以最初,**"8 "被存储在第0个索引,"3 "被存储在第一个索引,"1 "**被存储在第二个索引,以此类推。现在,我们必须对这个数组进行升序排序,如下面给出的数组所示。

https://lh3.googleusercontent.com/3O4qmaJR1vAv_Z0SlLS36GNceQSBhHcpk-do8ZkoVdtqqNkUtBkjL9xTKbSaiYZDwhh96OTXyQkn8CLpTJpRc2kCh73XX_S89R1ekmNZRq1lv-noC3Cm8urD3wOdkYfszaklVSjR

现在,我们将逐步解释气泡排序的工作。

第1步

一开始,索引0携带8,而索引1携带3。由于我们必须对数组进行升序排序,因此,索引0的值将被替换为索引1的值。现在,更新后的数组将是。

https://lh6.googleusercontent.com/zdbWmDnddSPVtZJ7dZ1qaZ1sojbHGc8Cj4m3vbEXrqdQHGSUE6nojFmO6ZmXVfKGpFuSv90zb-07Rmet5pLlRE8syFxTXxlswiffohP2kn_aLg0H4GDBJ3enfMC-tmxYrBIZLQ-9

现在索引1的值将与索引2的值进行比较。索引1的值是8,而索引2的值是1,小于8,所以它将被交换,数组将被修改为。

https://lh3.googleusercontent.com/R77jWMCJ0VxuppLk9wPKpeWlNMDezrK8arnZT-aEG7xGWUde3qszeDLQjlAwIq1ALxFXC5v0C5sdbbPDNG5-hYjJaGD2e7Fi49727cRvZEw5YM7hQRd9msbcRGTFyPLJSLa_aSsE

现在,我们将在索引2和索引3之间做一个比较。索引2的值是8,大于索引3的值2,所以这两个值将被互换。

https://lh6.googleusercontent.com/cbX814aNJHqgsx6cTVyAGv563WUpTyK57tauOcttqPsEk8X3B23StqtFvOrEFHhr52-qn6840hzswNw85phIdzn58t-8JIKZHoD7smiA6WPMUYDQdPaNLPXPGfjfLUW44NdGxVpf

现在比较索引3的值和索引4的值。索引3的值是8,而索引4的值是-1,这意味着这两个值将被调换。

https://lh5.googleusercontent.com/rCTely2lhq94OZ4GilK2XSylqYEqcAQaoIw8flLxLFT5qIEiQFhqnC93BwA9xbH-VwcDZKyicMJiTlmpeYrnhikT3r9UXdxDTzoj3-XldV_Z2XNkJMlIlENppVBKiMzd0iG-PIhd

最后,索引4的值将与索引5的值进行比较。同样,8比7大,所以它将被替换成7。

https://lh4.googleusercontent.com/huc4V2FkWAoj9ciDxK69v1WaOu7mtTzpcCrOJfh97lZwcffU2ZVuH3MtNB59SFwYYNUHACGLjWYsMaqh4SLOli3yaZUH0adra2Ideg5g8j22CpWVue53PBqwera-MNMhBTfAlzDP

现在,第一次迭代完成了,"8 "到达了它的适当位置。因此,在下一步中,比较将一直进行到第4个索引,因为最后一个索引的值已经被排序。

第2步

现在,前两个索引将被比较。第1个索引的值小于第0个索引的值,因此它们的值将被调换。

https://lh6.googleusercontent.com/SqcdIflnP4c4LxbCuHaHeYTSdc3N6dvxnb2OWcsVZsIqBZovwJbf8mjFASKch6b3qm0wP-TQXaGWTL2pPvriXrgRiwP37_nhRubZFrvQVh7UBKA41mSyQsMzQJwukxm-v5RIpxLg

接下来,我们将比较第一个索引的值和第二个索引的值。这里,3比2大,所以,它将被替换为2。

https://lh5.googleusercontent.com/kzJ2MSrF2nOotHJ8XYXm7BPYY4hqe-p651h1v-DrotdjJ5Q-Q6oHeoMRFI0g3iLGOrpOhfj1DsAVjqXfy1L71b268_tTanbYCw0OqfDbJktSkrzlSrKVhGWnpXW3IRWqMlK3N0Hn

现在我们将比较第2和第3个索引的值,即3(第2个索引)和第3个索引的值,即-1。由于3大于-1,所以数值将再次被交换。

https://lh6.googleusercontent.com/bSM3kcCDiFhTWGhtxcdYDzfIWB5lsuUOybFfUtD_esx_tb84OHWaaiYfxsO3sJcqH1MdqYTyflWqN8S1FjXwXyfdwU4c-vg3m2PLc29VwNnGDpLzxyAIW3nAAjpg5XmHrDt2osjH

第3个索引的值已经小于第4个索引的值,所以,它将保持不变。

https://lh6.googleusercontent.com/K5V06ZT9M-YEYIJx5k3f4ByNEyJNR-lNS7-GQzfGIXlWsD2MuCh-QSafBEc-rSGTmrUF-C0OZPml5YwCMJ1N9M5yF9sr5jggWY1uj2-bOVcbqPH7aniO4S0W7JgTzOoatp22zs0-

现在,最后两个索引被排序,数值被正确地放在第四和第五个索引上。

第3步

现在在这个迭代中,最初第0个索引的值将与第1个索引的值比较。这里,第0个索引的值是1,已经小于第1个索引的值2,所以,这些值将保持不变。

https://lh6.googleusercontent.com/dW9osVvFY-6G-0l32gdNkxnhfL7zfqWric8ThQ8otjNfYmwt5p97p_wcGYr-jpuitzE9UYQw3EfUe9zi_jWn6mNRqClxaUZmMQKLUJuE5WCnJtf1kP6AAaYALgpWtpF3JteS4QnO

接下来,比较接下来的两个索引,这里第1个索引的值大于第2个索引的值,因此,它们的值将被互换。

https://lh4.googleusercontent.com/g51LNuSJc4F1i2-HVYTwXQGQynjVlvlohf5xfgn2j7WsVgCDCFqQ-6Naizv73XAQm2N-b6j26KnD9-2699LxOeeJYXVBwPQ7AJ08YHKg6dGGxCiccLVQG3i-D5ECWtgoe-DqitB2

第2个索引的值已经小于第3个索引的值,因此,它们的值不会被交换。

https://lh5.googleusercontent.com/zYgLxzq2xu6zYo9eyF-OnZ9fxrPIKDIaFqfbFzYDkQA2geMXmlahm1xEny2Mofw53idfMO4W7ELxR9_eTj_rcn6GRgzAy-N_Hz-G2wwVclxa5FATOlJdGOXx_o73OEFxJABiD47B

第4步

比较前两个索引。第0个索引的值是1,小于第1个索引的值(-1),所以它将被调换。

https://lh6.googleusercontent.com/6AbyyCn1c-puQCkTJmnRBdnUtZAR8qglfzkR7YMiBWWKScM8pdQUIQTOrMQCBw2d6QUbhPr0CZUzlhWc_8qyaRc1thh8LZfVhHwkfKsf8oN3esM3bDVY1eou18su5Uz2xHP_6fxd

接下来,我们将比较第1个索引的值和第2个索引的值。它们已经被排序了,所以它们将保持一致。

https://lh5.googleusercontent.com/oein6H-ZZT6CQK4-9AxNzSLBBHwNu6hBFZ9ZPcDFegBLa2YAobDPCNmxYjCZoOR8QcdW9Xt_4UTc4uNnDc4farCOZPyx7HTSipo6Jlv-HBfWvxG9bd3DrsofMRebUWOEcj6fWpQG

最后,我们的数组是按升序排序的。

在JavaScript中实现冒泡排序

既然我们了解了气泡排序的工作原理,现在我们将使用嵌套循环在JavaScript中实现这一逻辑。

functionbubbleSort(ary){
    leti, j;
    varflag = false;
       
    for(i =0; i<ary.length; i++)
    {
        flag = false;
        for(j = 0; jary[j + 1])
            {
            vartemp = ary[j]
            ary[j] = ary[j+1];
            ary[j+1] = temp;
            flag = true;
            }
        }
        if(!flag)
        {
        break;
        }
    }
    console.log(ary)
    }
    varary = [8, 3, 1, 2, -1, 7];
    bubbleSort(ary);

https://lh6.googleusercontent.com/Vs4ri0LxcOciNjKva5tzb-fNarNMeJhvuXDKQI3lzg-Vm18NyVC1emXNQUIHEFT88m2zro7t_HInK5jwAGgUW0uE0Xv3UX1BtEuESCArRaj9_BGJfs53CGxwi6_wROqcz1S0_cmr

在上面给出的代码中,我们创建了一个名为**'ry'** 的数组,并向其分配了一些数据。之后,我们创建了一个名为bubbleSort的 函数,并将数组传递给它。一个名为**'flag'** 的变量最初被赋值为**'false'。**这个标志将被用来验证数组是否被完全排序了。接下来,for-loop被初始化为0,它将被执行,直到它小于数组的长度。

嵌套for-loop被用来对当前索引的值和相邻索引的值进行比较,只有当当前索引的值高于其相邻索引的值时,这些值才会被交换。如果在迭代过程中任何数值被交换,标志的值将被替换为真。

一旦内循环结束,将检查标志变量。如果标志变量保持为假,这意味着数组已经被整理好了,内循环没有改变任何东西。在这种情况下,只需中断该循环。

最后,数组被传递给**bubbleSort()**函数。其输出结果将是。

结论

泡沫排序是一种基本的排序算法,它反复交换并排的元素,直到它们的顺序不正确为止。在这篇文章中,我们介绍了理解JavaScript中的冒泡排序概念所需的所有基础知识和基本知识。从介绍开始,描述了什么是冒泡排序以及它是如何工作的。然后我们举了一个例子来理解冒泡排序的概念。此外,我们用JavaScript实现了同一个例子,并详细讨论了它的工作原理。