成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試刷題必看!Python中的5大排序算法及其實現代碼

開發 后端 算法
排序是每個 IT 工程師和開發人員必備的知識技能。不僅要通過編程面試,而且要了解算法本身。不同的排序算法很好地展示了算法設計如何對程序的復雜性、速度和效率產生如此大的影響。

 排序是每個 IT 工程師和開發人員必備的知識技能。不僅要通過編程面試,而且要了解算法本身。不同的排序算法很好地展示了算法設計如何對程序的復雜性、速度和效率產生如此大的影響。

讓我們來看看排名前5,也是最常見,面試中經常被問到的排序算法,看看如何用Python實現它們!

 

[[337940]]

 

1.冒泡排序

冒泡排序是 CS 入門課程中最常講授的一種,因為它清楚地說明了排序的工作原理,同時又簡單又易于理解。冒泡排序將逐步遍歷列表并比較相鄰的元素對。如果元素的順序錯誤,則會交換這些元素。重復對列表中未排序部分的遍歷,直到對列表進行排序。因為冒泡排序重復地通過列表中未排序的部分,所以它的最壞情況復雜性為O(n²)。

 

 

 

  1. def bubble_sort(arr): 
  2.     def swap(i, j): 
  3.         arr[i], arr[j] = arr[j], arr[i] 
  4.  
  5.     n = len(arr) 
  6.     swapped = True 
  7.      
  8.     x = -1 
  9.     while swapped: 
  10.         swapped = False 
  11.         x = x + 1 
  12.         for i in range(1, n-x): 
  13.             if arr[i - 1] > arr[i]: 
  14.                 swap(i - 1, i) 
  15.                 swapped = True 
  16.                      
  17.     return arr 

2.選擇排序

選擇排序也相當簡單,優于冒泡排序。如果你要在這兩者之間進行選擇,那么最好使用默認的“右選擇排序”。使用選擇排序,我們將輸入列表/數組分為兩部分:已排序項的子列表和構成列表其余部分的剩余項的子列表。

我們首先在未排序的子列表中找到最小的元素,并將其放在已排序子列表的末尾。因此,我們不斷地獲取最小的未排序元素,并將其按排序順序放入已排序的子列表中。此過程將重復進行,直到列表完全排序。

 

 

 

  1. def selection_sort(arr):         
  2.     for i in range(len(arr)): 
  3.         minimum = i 
  4.          
  5.         for j in range(i + 1, len(arr)): 
  6.             # 選擇最小值 
  7.             if arr[j] < arr[minimum]: 
  8.                 minimum = j 
  9.  
  10.         # 把它放在已排序的數組結尾 
  11.         arr[minimum], arr[i] = arr[i], arr[minimum] 
  12.              
  13.     return arr 

3.插入排序

插入排序比冒泡排序和選擇排序都要快,而且可以說更加簡單。就像在玩紙牌游戲時,洗牌的過程就是反復進行插入排序!在每次循環迭代中,插入排序從數組中刪除一個元素。然后在另一個排序數組中查找該元素所屬的位置,并將其插入其中。它重復這個過程,直到沒有輸入元素保留。

 

 

 

  1. def insertion_sort(arr): 
  2.          
  3.     for i in range(len(arr)): 
  4.         cursor = arr[i] 
  5.         pos = i 
  6.          
  7.         while pos > 0 and arr[pos - 1] > cursor
  8.             # 交換列表中的數字 
  9.             arr[pos] = arr[pos - 1] 
  10.             pos = pos - 1 
  11.         # 中斷并進行最終交換 
  12.         arr[pos] = cursor 
  13.  
  14.     return arr 

4.合并排序

合并排序是一個完美的分而治之的算法例子。使用這種算法只需要通過以下兩個主要步驟:

(1) 連續分割未排序的列表,直到有N個子列表,其中每個子列表都有1個“未排序”的元素,N是原始數組中的元素數。

(2) 反復合并,即一次將兩個子列表合并在一起,生成新的已排序子列表,直到所有元素都完全合并到一個已排序的數組中。

 

面試刷題必看!Python中的5大排序算法及其實現代碼

 

 

  1. def merge_sort(arr): 
  2.     # 對最后一個數組進行拆分 
  3.     if len(arr) <= 1: 
  4.         return arr 
  5.     mid = len(arr) // 2 
  6.     # 在兩個部分上遞歸執行merge_sort 
  7.     leftright = merge_sort(arr[:mid]), merge_sort(arr[mid:]) 
  8.  
  9.     # 合并在一起 
  10.     return merge(leftright, arr.copy()) 
  11.  
  12.  
  13. def merge(leftright, merged): 
  14.  
  15.     left_cursor, right_cursor = 0, 0 
  16.     while left_cursor < len(leftand right_cursor < len(right): 
  17.        
  18.         # 將每一個排序并放入結果 
  19.         if left[left_cursor] <= right[right_cursor]: 
  20.             merged[left_cursor+right_cursor]=left[left_cursor] 
  21.             left_cursor += 1 
  22.         else
  23.             merged[left_cursor + right_cursor] = right[right_cursor] 
  24.             right_cursor += 1 
  25.              
  26.     for left_cursor in range(left_cursor, len(left)): 
  27.         merged[left_cursor + right_cursor] = left[left_cursor] 
  28.          
  29.     for right_cursor in range(right_cursor, len(right)): 
  30.         merged[left_cursor + right_cursor] = right[right_cursor] 
  31.  
  32.     return merged 

5.快速排序

快速排序也是一種分而治之的算法,與合并排序一樣。盡管它有點復雜,但在大多數標準實現中,它的執行速度比合并排序快得多,而且很少達到O(n²)的最壞情況復雜度。它有三個主要步驟:

(1) 我們首先從數組中選擇一個元素,稱之為pivot。

(2) 將小于軸的所有元素移到軸的左側;將大于軸的所有元素移到軸的右側。這稱為分區操作。

(3) 遞歸地將上述2個步驟分別應用于元素的每個子數組,這些元素的值比上一個軸的值小或大。

 

面試刷題必看!Python中的5大排序算法及其實現代碼

 

 

  1. def partition(array, beginend): 
  2.     pivot_idx = begin 
  3.     for i in xrange(begin+1, end+1): 
  4.         if array[i] <= array[begin]: 
  5.             pivot_idx += 1 
  6.             array[i], array[pivot_idx] = array[pivot_idx], array[i] 
  7.     array[pivot_idx], array[begin] = array[begin], array[pivot_idx] 
  8.     return pivot_idx 
  9.  
  10. def quick_sort_recursion(array, beginend): 
  11.     if begin >= end
  12.         return 
  13.     pivot_idx = partition(array, beginend
  14.     quick_sort_recursion(array, begin, pivot_idx-1) 
  15.     quick_sort_recursion(array, pivot_idx+1, end
  16.  
  17. def quick_sort(array, begin=0, end=None): 
  18.     if end is None: 
  19.         end = len(array) - 1 
  20.      
  21.     return quick_sort_recursion(array, beginend

--END--

很多同學在學習 Python 時,都會遇到各種各樣的算法問題,有些很容易就能搞懂,但是有些就需要一些時間精力來學習。

本文中的5種排序算法比較適合 Python 新手,大多數老程序員對排序算法已經爐火純青了,都是在面試過程中,被迫學習的。

責任編輯:華軒 來源: 今日頭條
相關推薦

2021-08-25 09:59:00

開發排序代碼

2015-10-08 09:08:50

Python實現

2018-10-10 14:03:00

Java開發代碼

2020-09-14 14:47:13

排序算法

2019-05-29 17:45:32

JavaScript算法思路代碼實現

2015-11-12 11:05:07

java排序算法

2016-09-30 14:23:16

數據結構算法八大排序算法

2020-09-25 08:49:42

HashMap

2020-11-25 10:40:58

程序員技能開發者

2015-11-03 09:24:12

Java讀寫鎖分析

2012-09-10 10:39:04

IBMdw

2011-03-18 10:26:47

Java對象

2022-03-10 12:03:33

Python算法代碼

2019-08-28 11:08:51

排序算法Java

2017-02-09 16:16:24

Java負載均衡算法

2023-10-30 13:31:22

Springboot工具Java

2012-06-28 14:01:30

Java程序員排序

2019-04-12 09:00:01

負載均衡Java服務器

2017-11-22 10:53:22

2011-08-29 11:25:29

清空service bSQL Server
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲高清一区二区三区 | 日韩中文av在线 | 日日噜噜噜夜夜爽爽狠狠视频97 | 伊人久久在线 | 久综合 | 成人在线精品视频 | 国产精品一区二区免费 | 久久久久无码国产精品一区 | 围产精品久久久久久久 | 欧美成人免费在线视频 | 夜久久 | 国产99久久精品一区二区永久免费 | 久久久91 | 欧美日韩黄 | 午夜在线视频 | 日本免费小视频 | 人人亚洲 | 久久免费香蕉视频 | 在线观看不卡av | 狠狠伊人| 中文字幕亚洲视频 | 欧美视频精品 | 激情久久久久 | 紧缚调教一区二区三区视频 | 在线观看免费福利 | 日韩精品一区二区三区在线播放 | 欧美一区二区三区免费电影 | 免费人成激情视频在线观看冫 | 成人精品免费视频 | 国产精品一二三区 | 国产精品99999| 91久久精品一区二区三区 | 自拍 亚洲 欧美 老师 丝袜 | 国产精品福利网站 | 欧美一区二区大片 | 国产观看 | 亚洲一区二区三区观看 | 亚洲一区中文字幕 | 精品欧美一区二区三区久久久 | 九色av| 久久久久久久久久久久91 |