python 幾個簡單算法詳解
阿新 • • 發佈:2017-11-05
把他 color 無序 def 就是 基本 tro 找到 第一個
一、冒泡排序
基本思想:它的思路很有特點循環,兩兩向後比較。它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。
#冒泡排序 # def bubble_sort(li): # for i in range(len(li)-1): #走一趟,循環的次數 # for j in range(len(li)-i-1): #有序列為,len(li)-i,去掉有序不循環 # if li[j]>li[j+1]: #如果後一個數大,那就交換 # li[j],li[j+1]=li[j+1],li[j]
二、選擇排序
基本思想:從所有序列中先找到最小的,然後放到第一個位置。之後再看剩余元素中最小的,放到第二個位置……以此類推,就可以完成整個的排序工作了。
#選擇排序 def select_sort(li): for i in range(len(li)-1): #循環趟 min_loc=i #設置i為最小下標 for j in range(1+i,len(li)-1): #循環無序區 if li[min_loc]>li[j]: #如過不是最小值,就換下標 min_loc=j if min_loc!=i: #如果下標不是原來的值,就互換 li[i],li[min_loc]=li[min_loc],li[i]
三、插入排序
基本思想:將列表分為有序區和無序區兩個部分,最初有序區只有一個元素,.每次從無序區選擇一個元素,插入到無序區的位置,直到無序區變空.
# 插入排序 def insert_sort(li): for i in range(1, len(li)): #走趟,從第一個數開始 tmp = li[i] #tmp為無序區手中拿的那張牌 j= i - 1 #j 為有序區的右側第一張牌 while j >= 0 and tmp < li[j]: print(li) #當 有序區至少一張牌,且有序區右側第一張牌大於需要插入的牌時 li[j + 1] = li[j] #有序區右側第一張牌繼續向右移位, j = j - 1 #有序區向右移一位,繼續讓手牌去比較 li[j + 1] = tmp #當手牌不比左邊的牌大了,將手牌插入
python 幾個簡單算法詳解