基於python語言的經典排序法(冒泡法和選擇排序法)

來源:互聯網
上載者:User

標籤:整數   基於   詳情   支援   ble   count   code   中斷   array   

每逢周末就遇雨期,閑暇之餘,搗鼓了下python,心心念想學習,今天就在電腦上裝了個2.7,學習了下經典演算法,冒泡與選擇排序法

第一次寫關於python的文章,說的不當之處,多多指正,我積極改正

在之前,曾寫過使用java和C語言實現該兩種排序法,詳情見https://www.cnblogs.com/hong-fithing/p/7615907.html

搭建環境,準備工作就不冗餘介紹了,網上搜羅一大堆

目錄冒泡排序法選擇排序法冒泡排序法

冒泡類似於汽水現象,搖動一下,就有很多泡往上冒,概念不多說,直接看一張執行的結果圖,看圖分析,如下

  圖片中將每次的排序過程都列印出來,這樣一看,就很簡潔明了,比如第一次排序,相鄰兩個數進行比較,直到100大於2時,做了交換,然後沒有數比100再大,所以100排在了最後,類似於找到了最大的值,第二次排序,就是找到第二大的值,並排在倒數第二個,依次類推

代碼實現比java簡單,福士之言果然不假,沒有java一些條件的限制,比如聲明變數這些,python中是直接使用,見代碼如下:

 1 #coding=utf-8 2 lis = raw_input(‘請輸入十個正整數:‘) 3 arrays=[int(a) for a in lis.split()] 4 print(arrays) 5 for a in range(len(arrays)): 6     for b in range(len(arrays)-1): 7         if arrays[b] > arrays[b+1]: 8             temp = arrays[b] 9             arrays[b] = arrays[b+1]10             arrays[b+1] = temp11 for c in arrays:12     print(str(c)),

  這是很簡單的排序,輸入資料,通過for迴圈排序,輸出結果,文前所貼圖片,就是在該基礎上加了幾句代碼,目的只是讓排序過程更直觀,代碼如下:

#coding=utf-8lis = raw_input(‘\n請輸入十個正整數:‘)#2版本的需要使用raw_input輸入arrays=[int(a) for a in lis.split()]    #將輸入每個數以空格鍵隔開做成數組print("輸入的十個整數為:") print(arrays)                          for a in range(len(arrays)):            #取arrays的長度做為迴圈條件    for b in range(len(arrays)-1):      #取arrays-1的長度做為迴圈條件        if arrays[b] > arrays[b+1]:      #如果數組中的第一個值大於第二個值            temp = arrays[b]             #則將大的值arrays[b]賦值在temp中            arrays[b] = arrays[b+1]      #將小的值arrays[b+1]賦值在第一個值中            arrays[b+1] = temp           #將temp中的值賦值在第二個值中,實現更換位置    print("\n第%d" % (a + 1) + "次排序為:")    for c in range(len(arrays)):        #迴圈擷取數組的長度        print arrays[c],                #列印排序的過程print("\n最終的排序為:")for c in arrays:                        #迴圈擷取數組長度    print str(c),                       #列印最終的排序結果,輸入逗號是為了不換行顯示

在琢磨python的時候,遇到兩個小問題,也是自己對python語言的不熟悉導致

問題一:

  由於裝的是2.7版本的python,input是需要使用raw_input來實現,在使用input函數的時候,運行程式就報File "<string>", line 1, in <module>錯誤

問題二:

  使用print arrays[c]輸出數組排序時,沒有按一行輸出,查看結果不直觀,通過度娘查詢,更多的是使用end來結束,發現該語言只支援3,然後查詢到在輸出語句後面加,逗號即可

兩個很小很小的問題,但對於我剛學習python還是琢磨了一番,所以在此記錄下

選擇排序法

冒泡排序磕磕絆絆成功後,選擇排序法就相對簡單一些了,排序邏輯上稍有些不同而已

選擇排序是將,最大或者最小值(依條件而定)與第一個值交換順序,與冒泡不同,看:

  可知,第一次排序中,是找到了最大的值100與第一位值交換了順序,第二次排序,則是找到第二大的值與第二位交換順序,以此類推

直接看代碼,如下:

 1 #coding=utf-8                            2 lis = raw_input(‘\n請輸入十個正整數:‘) 3 arrays=[int(a) for a in lis.split()]     4 print("輸入的十個整數為:")            5 print(arrays)                          6 for a in range(0,len(arrays)-1):        7     max = arrays[a]                      #設定一個最大值max 8     count = a                            #count是記住角標 9     for b in range(a+1,len(arrays)):   10         if max < arrays[b]:              #如果預設的最大值小於數組值arrays[b]11             max = arrays[b]              #則將arrays[b]中的值賦值給max12             count = b                    #角標賦給count13     temp = arrays[a]                     #則將大的值arrays[a]賦值在temp中14     arrays[a] = arrays[count]            #將小的值arrays[count]賦值在第一個值中15     arrays[count] = temp                 #將temp中的值賦值在第二個值中,實現更換位置16 print("\n最終的排序為:")17 for c in arrays:                        #迴圈擷取數組長度18     print str(c),                       #列印最終的排序結果,輸入逗號是為了不換行顯示

  這是實現選擇排序的基本文法,再看的代碼,如下:

 1 #coding=utf-8                             2 lis = raw_input(‘\n請輸入十個正整數:‘)#2版本的需要使用raw_input輸入,每個數之間用空格隔開 3 arrays=[int(a) for a in lis.split()]    #將輸入每個數以空格鍵隔開做成數組 4 print("輸入的十個整數為:")          5 print(arrays)                         6 for a in range(0,len(arrays)-1):        #取arrays-1的長度做為迴圈條件 7     max = arrays[a]                      #設定一個最大值max 8     count = a                            #count是記住角標 9     for b in range(a+1,len(arrays)):    #取a+1,arrays的長度做為迴圈條件10         if max < arrays[b]:              #如果預設的最大值小於數組值arrays[b]11             max = arrays[b]              #則將arrays[b]中的值賦值給max12             count = b                    #角標賦給count13     temp = arrays[a]                     #則將大的值arrays[a]賦值在temp中14     arrays[a] = arrays[count]            #將小的值arrays[count]賦值在第一個值中15     arrays[count] = temp                 #將temp中的值賦值在第二個值中,實現更換位置16     print("\n第%d" % (a + 1) + "次排序為:")17     for c in range(len(arrays)):        #迴圈擷取數組的長度18         print arrays[c],                #列印排序的過程19 print("\n最終的排序為:")20 for c in arrays:                        #迴圈擷取數組長度21     print str(c),                       #列印最終的排序結果,輸入逗號是為了不換行顯示

  第一次使用python,看到了便捷之處,也看到了自身的短缺,需要更好的學習之。上述就是今天搗鼓的內容,內容不是很新奇,但很經典,面試過程大多都會問到。自然,這兩個代碼還有可最佳化之處,可增加中斷迴圈,當已是有序的情況下,就跳出迴圈,節省排序時間,學習是個很有趣的過程,加油!

 

本文僅代表作者觀點,系作者@溫一壺清酒發表。轉載請註明出處:http://www.cnblogs.com/hong-fithing/

基於python語言的經典排序法(冒泡法和選擇排序法)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.