最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入分析python 排序

 更新時間:2020年08月24日 09:05:21   作者:justdopython  
這篇文章主要介紹了python 排序的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python排序的知識,感興趣的朋友可以了解下

排序是每個開發(fā)人員都需要掌握的技能。排序是對程序本身有一個全面的理解。不同的排序算法很好地展示了算法設(shè)計(jì)上如何強(qiáng)烈的影響程序的復(fù)雜度、運(yùn)行速度和效率。今天的文章和談?wù)劥蠹叶际煜さ母鞣N排序使用 Python 如何實(shí)現(xiàn),廢話就不多說啦,開干!

選擇排序

選擇排序一般是將初始值設(shè)為初始值,再循環(huán)后面每個元素與第一個元素比較,最終篩選出一個最小或最大值,最后將有序的數(shù)值排在前面,每次選擇當(dāng)前序列的最小值,將其與當(dāng)前序列的第一個元素交換位置,每迭代一次,當(dāng)前序列長度減一。迭代結(jié)束,即可得到有序序列。 實(shí)現(xiàn)代碼如下:

def select_s(data):
  # 第一層循環(huán):取出數(shù)組中的每個元素
  for i in range(len(data)):
    temp = i  # 拿取一個元素用來比較
    # 第二層循環(huán):從第i后面的一個值開始循環(huán),與data[i]進(jìn)行比較
    for j in range(i+1,len(data)):
      if data[j] < data[temp]:
        data[temp], data[j] = data[j], data[temp]
  print(data)

調(diào)用運(yùn)行結(jié)果:

if __name__ == '__main__':
  data = [14, 31, 14, 6, 18, 24, 2, 40]
  select_s(data)

輸出結(jié)果:

[2, 6, 14, 14, 18, 24, 31, 40]

插入排序

插入排序的基本操作就是將一個數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中,從而得到一個新的、個數(shù)加一的有序數(shù)據(jù),算法適用于少量數(shù)據(jù)的排序,時間復(fù)雜度為O(n^2)。是穩(wěn)定的排序方法。

插入算法把要排序的數(shù)組分成兩部分:第一部分包含了這個數(shù)組的所有元素,但將最后一個元素除外(讓數(shù)組多一個空間才有插入的位置),而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成后,再將這個最后元素插入到已排好序的第一部分中。

實(shí)現(xiàn)代碼如下:

def insert_s(data):
  # 第一層循環(huán): 從第二個元素開始循環(huán)取出元素,取出的元素再與有序區(qū)元素進(jìn)行比較
  for i in range(1,len(data)):
    temp = data[i]
    j = i-1
    while j>=0 and temp < data[j]:
      data[j+1] = data[j]  
      j = j-1  # 在與前面一個元素進(jìn)行比較,所以j 需要減1
    # 當(dāng)j = -1 就跳出循環(huán),將temp值賦給第一個值,即data[0]
    data[j+1] = temp
  print(data)

調(diào)用運(yùn)行結(jié)果:

if __name__ == '__main__':
data = [12, 3, 13, 56, 10, 22, 2, 40]
insert_s(data)

輸出結(jié)果:

[2, 3, 10, 12, 13, 22, 40, 56]

冒泡排序

冒泡排序(順序形式),從左向右,兩兩比較,如果左邊元素大于右邊,就交換兩個元素的位置。

其中,每一輪排序,序列中最大的元素浮動到最右面。也就是說,每一輪排序,至少確保有一個元素在正確的位置。

這樣接下來的循環(huán),就不需要考慮已經(jīng)排好序的元素了,每次內(nèi)層循環(huán)次數(shù)都會減一。

其中,如果有一輪循環(huán)之后,次序并沒有交換,這時我們就可以停止循環(huán),得到我們想要的有序序列了。

def insert_s(data):
  # 第一層循環(huán): 從第二個元素開始循環(huán)取出元素,取出的元素再與有序區(qū)元素進(jìn)行比較
  for i in range(1,len(data)):
    temp = data[i]
    j = i-1
    while j>=0 and temp < data[j]:
      data[j+1] = data[j]  
      j = j-1  # 在與前面一個元素進(jìn)行比較,所以j 需要減1
    # 當(dāng)j = -1 就跳出循環(huán),將temp值賦給第一個值,即data[0]
    data[j+1] = temp
  print(data)

調(diào)用運(yùn)行結(jié)果:

if __name__ == '__main__':
  data = [12, 3, 13, 56, 10, 22, 2, 40]
  insert_s(data)

輸出結(jié)果:

[2, 3, 10, 12, 13, 22, 40, 56]

快速排序

首先要打亂序列順序,以防算法陷入最壞時間復(fù)雜度。所以快速排序使用 “分而治之” 的方法。

對于一串序列,首先從中選取一個數(shù),凡是小于這個數(shù)的值就被放在左邊,凡是大于這個數(shù)的值就被放在右邊。然后,繼續(xù)對左右兩摞進(jìn)行快速排序。

直到進(jìn)行快速排序的序列長度小于 2 (即序列中只有一個值或者空值)。

代碼如下:

# 快速排序
def partition(data, left, right):
  temp = data[left]
  while left < right:
    # 如果最右邊的值大于中間值,則最右邊值往后退一個位置,反之,就將值賦值給最左邊位置
    while left < right and data[right] >= temp:
      right = right - 1
    data[left] = data[right]
    # 如果最左邊的值小于中間值,則最左邊值往前進(jìn)一個位置,反之,就將值賦值給最右邊位置
    while left < right and data[left] <= temp:
      left = left + 1
    data[right] = data[left]
  # 循環(huán)結(jié)束,即可定位到中間位置,將初始值,賦值到這個位置
  data[left] = temp
  return left


def quick_sort(data, left, right):
  if left < right:
    mid = partition(data, left, right)
    quick_sort(data, left, mid)
    quick_sort(data, mid + 1, right)

總結(jié)

今天的文章主要是使用 Python 實(shí)現(xiàn)各大排序程序,以及排序算法實(shí)現(xiàn)思路的梳理,自己學(xué)習(xí)的同時給大家整理思路!

示例代碼Python 排序了解一下?

以上就是深入分析python 排序的詳細(xì)內(nèi)容,更多關(guān)于python 排序的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python實(shí)現(xiàn)坦克大戰(zhàn)

    python實(shí)現(xiàn)坦克大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)坦克大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Python SQLAlchemy簡介及基本用法

    Python SQLAlchemy簡介及基本用法

    SQLAlchemy是一個基于Python實(shí)現(xiàn)的ORM對象關(guān)系映射框架,該框架建立在DB API之上,使用關(guān)系對象映射進(jìn)行數(shù)據(jù)庫操作,這篇文章主要介紹了SQLAlchemy簡介以及基本使用,需要的朋友可以參考下
    2023-08-08
  • Python Pygame實(shí)戰(zhàn)之超級炸彈人游戲的實(shí)現(xiàn)

    Python Pygame實(shí)戰(zhàn)之超級炸彈人游戲的實(shí)現(xiàn)

    如今的玩家們在無聊的時候會玩些什么游戲呢?王者還是吃雞是最多的選擇。但在80、90年代的時候多是一些很簡單的游戲:《超級瑪麗》、《魂斗羅》等。本文將利用Pygame制作另一個經(jīng)典游戲—炸彈人,感興趣的可以了解一下
    2022-03-03
  • Python列表推導(dǎo)式,元組推導(dǎo)式,字典推導(dǎo)式,集合推導(dǎo)式

    Python列表推導(dǎo)式,元組推導(dǎo)式,字典推導(dǎo)式,集合推導(dǎo)式

    這篇文章主要介紹了Python列表推導(dǎo)式,元組推導(dǎo)式,字典推導(dǎo)式,集合推導(dǎo)式,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • python在Windows下安裝setuptools(easy_install工具)步驟詳解

    python在Windows下安裝setuptools(easy_install工具)步驟詳解

    這篇文章主要介紹了python在Windows下安裝setuptools(easy_install工具)步驟,簡單介紹了setuptools并分析了其安裝步驟與所涉及的相關(guān)軟件,需要的朋友可以參考下
    2016-07-07
  • 一文帶你了解Python中的雙下方法

    一文帶你了解Python中的雙下方法

    Python中有一些特殊方法的方法名都是以雙下劃線開始和結(jié)束,所以又被稱為雙下方法。本文就來為大家詳細(xì)講講Python中的雙下方法的使用,感興趣的可以了解一下
    2022-07-07
  • Django model class Meta原理解析

    Django model class Meta原理解析

    這篇文章主要介紹了Django model class Meta原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Python編寫屏幕網(wǎng)格生成工具

    Python編寫屏幕網(wǎng)格生成工具

    這篇文章主要為大家詳細(xì)介紹了如何通過Python編寫屏幕網(wǎng)格生成工具,可以定期繪制一個透明的網(wǎng)格,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • python讓圖片按照exif信息里的創(chuàng)建時間進(jìn)行排序的方法

    python讓圖片按照exif信息里的創(chuàng)建時間進(jìn)行排序的方法

    這篇文章主要介紹了python讓圖片按照exif信息里的創(chuàng)建時間進(jìn)行排序的方法,涉及Python操作圖片exif獲取信息的技巧,需要的朋友可以參考下
    2015-03-03
  • python如何給內(nèi)存和cpu使用量設(shè)置限制

    python如何給內(nèi)存和cpu使用量設(shè)置限制

    這篇文章主要介紹了python如何給內(nèi)存和cpu使用量設(shè)置限制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評論

扬中市| 敦化市| 深水埗区| 麟游县| 沽源县| 互助| 资阳市| 东城区| 昌邑市| 康乐县| 庐江县| 资溪县| 五台县| 苏尼特右旗| 光泽县| 华蓥市| 枣强县| 右玉县| 东宁县| 迁安市| 长宁区| 邓州市| 诸暨市| 舒城县| 香港| 崇信县| 古田县| 肇源县| 黎平县| 通江县| 龙岩市| 建水县| 黄石市| 南康市| 乌审旗| 鄂温| 蓬溪县| 仙游县| 宜兰县| 建始县| 闻喜县|