日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
面試官:說(shuō)說(shuō)你對(duì)冒泡排序的理解?如何實(shí)現(xiàn)?應(yīng)用場(chǎng)景?

[[427403]]

本文轉(zhuǎn)載自微信公眾號(hào)「JS每日一題」,作者灰灰 。轉(zhuǎn)載本文請(qǐng)聯(lián)系JS每日一題公眾號(hào)。

創(chuàng)新互聯(lián)是專(zhuān)業(yè)的南昌縣網(wǎng)站建設(shè)公司,南昌縣接單;提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行南昌縣網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

一、是什么

冒泡排序(Bubble Sort),是一種計(jì)算機(jī)科學(xué)領(lǐng)域的較簡(jiǎn)單的排序算法

冒泡排序的思想就是在每次遍歷一遍未排序的數(shù)列之后,將一個(gè)數(shù)據(jù)元素浮上去(也就是排好了一個(gè)數(shù)據(jù))

如同碳酸飲料中二氧化碳的氣泡最終會(huì)上浮到頂端一樣,故名“冒泡排序”

假如我們要把 12、35、99、18、76 這 5 個(gè)數(shù)從大到小進(jìn)行排序,那么數(shù)越大,越需要把它放在前面

思路如下:

  • 從后開(kāi)始遍歷,首先比較 18 和 76,發(fā)現(xiàn) 76 比 18 大,就把兩個(gè)數(shù)交換順序,得到 12、35、99、76、18
  • 接著比較 76 和 99,發(fā)現(xiàn) 76 比 99 小,所以不用交換順序
  • 接著比較 99 和 35,發(fā)現(xiàn) 99 比 35 大,交換順序
  • 接著比較 99 和 12,發(fā)現(xiàn) 99 比 12 大,交換順序

最終第 1 趟排序的結(jié)果變成了 99、12、35、76、18,如下圖所示:

上述可以看到,經(jīng)過(guò)第一趟的排序,可以得到最大的元素,接下來(lái)第二趟排序則對(duì)剩下的的4個(gè)元素進(jìn)行排序,如下圖所示:

經(jīng)過(guò)第 2 趟排序,結(jié)果為 99、76、12、35、18

然后開(kāi)始第3趟的排序,結(jié)果為99、76、35、12、18

然后第四趟排序結(jié)果為99、76、35、18、12

經(jīng)過(guò) 4 趟排序之后,只剩一個(gè) 12 需要排序了,這時(shí)已經(jīng)沒(méi)有可比較的元素了,這時(shí)排序完成

二、如何實(shí)現(xiàn)

如果要實(shí)現(xiàn)一個(gè)從小到大的排序,算法原理如下:

首先比較相鄰的元素,如果第一個(gè)元素比第二個(gè)元素大,則交換它們

針對(duì)每一對(duì)相鄰元素做同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì),這樣,最后的元素會(huì)是最大的數(shù)

針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)

持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較

用代碼表示則如下:

 
 
 
 
  1. function bubbleSort(arr) { 
  2.     const len = arr.length; 
  3.     for (let i = 0; i < len - 1; i++) { 
  4.         for (let j = 0; j < len - 1 - i; j++) { 
  5.             if (arr[j] > arr[j+1]) {        // 相鄰元素兩兩對(duì)比 
  6.                 var temp = arr[j+1];        // 元素交換 
  7.                 arr[j+1] = arr[j]; 
  8.                 arr[j] = temp; 
  9.             } 
  10.         } 
  11.     } 
  12.     return arr; 

可以看到:冒泡排序在每一輪排序中都會(huì)使一個(gè)元素排到一趟, 也就是最終需要 n-1 輪這樣的排序

而在每輪排序中都需要對(duì)相鄰的兩個(gè)元素進(jìn)行比較,在最壞的情況下,每次比較之后都需要交換位置,此時(shí)時(shí)間復(fù)雜度為O(n^2)

優(yōu)化

對(duì)冒泡排序常見(jiàn)的改進(jìn)方法是加入一標(biāo)志性變量exchange,用于標(biāo)志某一趟排序過(guò)程中是否有數(shù)據(jù)交換

如果進(jìn)行某一趟排序時(shí)并沒(méi)有進(jìn)行數(shù)據(jù)交換,則說(shuō)明數(shù)據(jù)已經(jīng)按要求排列好,可立即結(jié)束排序,避免不必要的比較過(guò)程

可以設(shè)置一標(biāo)志性變量pos,用于記錄每趟排序中最后一次進(jìn)行交換的位置,由于pos位置之后的記錄均已交換到位,故在進(jìn)行下一趟排序時(shí)只要掃描到pos位置即可,如下:

 
 
 
 
  1. function bubbleSort1(arr){ 
  2.  const i=arr.length-1;//初始時(shí),最后位置保持不變   
  3.  while(i>0){ 
  4.   let pos = 0;//每趟開(kāi)始時(shí),無(wú)記錄交換 
  5.   for(let j = 0; j < i; j++){ 
  6.    if(arr[j] > arr[j+1]){ 
  7.         let tmp = arr[j]; 
  8.         arr[j] = arr[j+1]; 
  9.         arr[j+1] = tmp; 
  10.     pos = j;//記錄最后交換的位置   
  11.    }    
  12.   } 
  13.   i = pos;//為下一趟排序作準(zhǔn)備 
  14.  } 
  15.  return arr; 

在待排序的數(shù)列有序的情況下,只需要一輪排序并且不用交換,此時(shí)情況最好,時(shí)間復(fù)雜度為O(n)

并且從上述比較中看到,只有后一個(gè)元素比前面的元素大(小)時(shí)才會(huì)對(duì)它們交換位置并向上冒出,對(duì)于同樣大小的元素,是不需要交換位置的,所以對(duì)于同樣大小的元素來(lái)說(shuō),相對(duì)位置是不會(huì)改變的,因此, 冒泡排序是穩(wěn)定的

三、應(yīng)用場(chǎng)景

冒泡排的核心部分是雙重嵌套循環(huán), 時(shí)間復(fù)雜度是 O(N 2 ),相比其它排序算法,這是一個(gè)相對(duì)較高的時(shí)間復(fù)雜度,一般情況不推薦使用,由于冒泡排序的簡(jiǎn)潔性,通常被用來(lái)對(duì)于程序設(shè)計(jì)入門(mén)的學(xué)生介紹算法的概念

參考文獻(xiàn)

 

  • https://baike.baidu.com/item/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F/4602306
  • https://www.runoob.com/w3cnote/bubble-sort.html
  • http://data.biancheng.net/view/116.html
  • https://dsb123dsb.github.io/2017/03/07/js%E5%AE%9E%E7%8E%B0%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F%E4%BB%A5%E5%8F%8A%E4%BC%98%E5%8C%96/

 


網(wǎng)站名稱(chēng):面試官:說(shuō)說(shuō)你對(duì)冒泡排序的理解?如何實(shí)現(xiàn)?應(yīng)用場(chǎng)景?
文章鏈接:http://www.dlmjj.cn/article/cdpoppg.html