国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

python實(shí)現(xiàn)冒泡排序算法的兩種方法

2020-02-22 23:23:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

什么是冒泡排序?

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

它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列已經(jīng)排序完成。

這個(gè)算法的名字由來(lái)是因?yàn)樵酱蟮脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端,故名冒泡排序。

以上是百度詞條對(duì)冒泡排序的官方解釋。

但是我要說(shuō)一下我的個(gè)人理解,我覺(jué)得冒泡排序的核心思想是:每次比較兩個(gè)數(shù),如果他們順序錯(cuò)誤(大于或者小于),那么就把他們置換。

例如:如果要將五個(gè)無(wú)序的數(shù)字做升序排列(也就是從小到大排列),那么利用冒泡排序如何實(shí)現(xiàn)呢?

    首先,比較第一個(gè)數(shù)和第二個(gè)數(shù)的大小,由于是從小到大排列,所以如果第一個(gè)數(shù)大于第二個(gè)數(shù),則將這兩個(gè)數(shù)互換位置,反之則不變。 然后進(jìn)行第二個(gè)數(shù)和第三個(gè)數(shù)比較,同上。 這樣依次比較一輪后,你會(huì)發(fā)現(xiàn),總共比了4次,也就是說(shuō),如果有n個(gè)數(shù)進(jìn)行比較,那么需要n-1次才能完成。 上面過(guò)程主要完成了一輪比較,最終確定了一個(gè)最大的數(shù),并且排在5個(gè)數(shù)的最后,也就是第五個(gè)數(shù)。 那么也就意味著需要在進(jìn)行第一個(gè)數(shù)到第四個(gè)數(shù)的一輪比較,確定最大值。 接著從第一個(gè)數(shù)到第三個(gè)數(shù)...... 這樣規(guī)律就很明顯了,五個(gè)數(shù)需要比較四輪,就能將5個(gè)數(shù)升序排列,所以n個(gè)數(shù)需要比較n-1輪。

以上就是冒泡排序的實(shí)現(xiàn)思路,接下來(lái)看代碼!

如何實(shí)現(xiàn)?

到底該怎么實(shí)現(xiàn)呢?看了上面的分析,我相信你也能編出來(lái)吧!

看下我用python編的吧:

方法一:常規(guī)實(shí)現(xiàn)冒泡排序

# 方法1# 定義一個(gè)列表,用于存放數(shù)字list = []while True:  # 自定義輸入數(shù)字個(gè)數(shù)  print('你想排列幾個(gè)數(shù)?')  try:    num = int(input())    for i in range(num):      a = int(input('請(qǐng)輸入第' + str((i+1)) + '個(gè)整數(shù):'))      list.append(a)  except ValueError:    print('輸入有誤!')    # 冒泡排序核心代碼,  for j in range(len(list)-1):    for k in range(len(list)-1):      if list[k] < list[k+1]:        t = list[k]        list[k] = list[k+1]        list[k+1] = t  print(list)

算法的優(yōu)劣主要看它的時(shí)間復(fù)雜度,冒泡排序的時(shí)間復(fù)雜度為:O(N^2)

可以看出,冒泡排序的時(shí)間復(fù)雜度偏高,所以它還不是最優(yōu)算法!

方法二:利用sorted()方法快速實(shí)現(xiàn)排序

# 定義一個(gè)列表對(duì)象存數(shù)字list = []print('你想排列幾個(gè)數(shù)?')try:  num = int(input())  for i in range(num):    a = int(input('請(qǐng)輸入第' + str((i + 1)) + '個(gè)整數(shù):'))    list.append(a)except ValueError:  print('輸入有誤!')# 利用sorted()方法排序,并使用reverse字段實(shí)現(xiàn)降序print(sorted(list, reverse=True))            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阳山县| 平陆县| 高淳县| 慈利县| 泗阳县| 华安县| 阳信县| 龙里县| 奉化市| 孟州市| 灵山县| 枣庄市| 灵璧县| 德惠市| 松潘县| 文昌市| 博白县| 繁昌县| 宁陵县| 清丰县| 宁波市| 隆尧县| 克拉玛依市| 岑巩县| 合江县| 内丘县| 诸城市| 固镇县| 新安县| 皮山县| 田林县| 尼玛县| 尚志市| 河源市| 汉寿县| 临沭县| 华安县| 兴安盟| 五家渠市| 津市市| 大竹县|