91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python常用排序算法的實現代碼

發布時間:2020-09-10 22:07:06 來源:腳本之家 閱讀:153 作者:Mars.wang 欄目:開發技術

這篇文章主要介紹了python常用排序算法的實現代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

排序是計算機語言需要實現的基本算法之一,有序的數據結構會帶來效率上的極大提升。

1.插入排序

插入排序默認當前被插入的序列是有序的,新元素插入到應該插入的位置,使得新序列仍然有序。

def insertion_sort(old_list):
  n=len(old_list)
  k=0
  for i in range(1,n):
    temp=old_list[i]
    j=i
    while j>0 and temp<old_list[j-1]:
      old_list[j]=old_list[j-1]
      j=j-1
    old_list[j]=temp
  return old_list

2.冒泡排序

冒泡排序的原理是對序列進行遍歷,遍歷過程中如果發現相鄰兩個元素,左邊的元素大于右邊,則進行交換,一次遍歷之后最大的元素被移動到對尾,然后進行第二次遍歷,直到隊列有序。

def bubble_sort(old_list):
  n=len(old_list)
  for i in range(n-1):
    for j in range(n-1-i):
      if old_list[j]>old_list[j+1]:
        old_list[j],old_list[j+1]=old_list[j+1],old_list[j]
  return old_list

3.快速排序

快速排序的實現方法是設置兩個游標,一個從前往后,一個從后往前,如果左側游標所指數據大于右側,兩數據進行交換,直到兩個游標指向同一數據,則第一趟遍歷結束。結束時游標所在數據,左側都比其小,右側都比其大。

接下來對游標前后的兩個序列進行遞歸操作。

def quick_sort(list,low,high):
  i=low
  j=high  
  if i >= j:
    return list
  key=list[i]
  while i < j:
    while i < j and list[j]>=key:
      j = j - 1
    list[i]=list[j]
    while i < j and list[i]<=key:
      i = i + 1
    list[j]=list[i]
  list[i]=key
  quick_sort(list,low,i-1)
  quick_sort(list,j+1,high)
  return list

4.選擇排序

選擇排序的原理是是先找到起始數組中最小的元素,將它交換到i=0;然后尋找剩下元素中最小的元素,將它交換到i=1的位置…… 直到找到第二大的元素,將它交換到n-2的位置。這時,整個數組的排序完成。

def select_sort(list):
  length=len(list)
  for i in range(length):
    min_index=i
    for j in range(i,length):
      if list[j]<list[min_index]:
        min_index=j
    list[i],list[min_index]=list[min_index],list[i]
  return list

5.歸并排序

歸并排序是對數組進行拆分再拆分,直到不能再拆分,然后分別對最小粒度的子數組進行合并,然后再合并稍微大一點的數組,直到最終合成一個最大的數組。分兩個函數完成,一個負責拆分,一個負責排序合并。

def merge_sort(list):
  if len(list)<=1:
    return list
  mid=int(len(list)/2)
  left=merge_sort(list[:mid])
  right=merge_sort(list[mid:])
  return merge(left,right)
def merge(list1,list2):
  list=[]
  i,j=0,0
  while i<len(list1) and j<len(list2):
    if list1[i]<list2[j]:
      list.append(list1[i])
      i=i+1
    elif list1[i]>=list2[j]:
      list.append(list2[j])
      j=j+1
  list.extend(list1[i:])
  list.extend(list2[j:])
  return list

6.希爾排序

def shell_sort(nums):
  step = len(nums)/2
  while step > 0:
    for i in range(step, len(nums)):
      while i >= step and nums[i-step] > nums[i]:
        nums[i], nums[i-step] = nums[i-step], nums[i]
        i -= step
    step = step/2
  return nums

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开封县| 托克逊县| 射阳县| 霍邱县| 商丘市| 阿克陶县| 正宁县| 寿阳县| 元朗区| 酒泉市| 萨迦县| 华蓥市| 望奎县| 永寿县| 汝州市| 合阳县| 潼关县| 巍山| 凌源市| 漳浦县| 张掖市| 阜阳市| 黑水县| 大姚县| 新津县| 凭祥市| 洛浦县| 威信县| 彭山县| 崇义县| 鄂尔多斯市| 盐源县| 项城市| 玉田县| 神木县| 达孜县| 东丰县| 昌吉市| 资兴市| 基隆市| 桑植县|