1. 程式人生 > >python 幾個簡單算法詳解

python 幾個簡單算法詳解

把他 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 幾個簡單算法詳解