1. 程式人生 > 其它 >python演算法初步(一)

python演算法初步(一)

python演算法初步(一)

氣泡排序

時間效率O(n²)
原理:依次比較相鄰兩個位置的元素大小,然後按照要求交換位置。

#從中選出一個數據(作為最小資料),然後和其他的資料依次比較,如果有更小的資料,那麼就一次比較。
def select_sort(data):
    for i in range(len(data)-1):#需要選擇的次數
        min = i
        for j in range(i+1,len(data)):#用於找到最小值所在的位置
            if data[min] > data[j]:
                min 
= j data[min],data[i] = data[i],data[min]#找到最小值所在的位置後,進行交換位置。 return data import random data_list=[i*i for i in range(10)] random.shuffle(data_list) print("使用索引交換位置,從小到大排序",select_sort(data_list)) print('*'*40) #選擇排序 #從中選出一個數據(作為最小資料),然後和其他的資料依次比較,如果有更小的資料,那麼就一次比較。 def select_sort(data):
for i in range(len(data)-1):#需要選擇的次數 min = data[i] for j in range(i+1,len(data)):#用於找到最小值所在的位置 if min > data[j]: min = data[j] data[data.index(min)],data[i] = data[i],data[data.index(min)]#找到最小值所在的位置後,進行交換位置。 return data import random data_list
= list(range(30)) #用於生成列表 random.shuffle(data_list) #用於打亂列表 data_list print("使用資料交換位置,從小到大排序",select_sort(data_list)) print('='*40) #選擇排序 #從中依次選擇出一個數據(進行比較),然後和其他資料進行比較,然後更換索引,或者直接交換資料本身 def select_sort(data): for i in range(len(data)-1): max = i for j in range(i+1,len(data)): if data[max] < data[j]: max = j data[i],data[max] = data[max],data[i] return data import random data_list = [i**3 for i in range(23)] random.shuffle(data_list) print("使用索引交換位置,從小到大排序",select_sort(data_list)) print('*'*40) #選擇排序 #來來交換資料的本身,從大到小排序 def select_sort(data): for i in range(len(data)-1): max = data[i] for j in range(i+1,len(data)): if max < data[j]: max = data[j] data[data.index(max)],data[i] = data[i],data[data.index(max)] return data import random data_list = [i**4 for i in range(20)] random.shuffle(data_list) print("使用資料交換位置,從小到大排序",select_sort(data_list)) #結果 ''' 使用索引交換位置,從小到大排序 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] **************************************** 使用資料交換位置,從小到大排序 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] ======================================== 使用索引交換位置,從小到大排序 [10648, 9261, 8000, 6859, 5832, 4913, 4096, 3375, 2744, 2197, 1728, 1331, 1000, 729, 512, 343, 216, 125, 64, 27, 8, 1, 0] **************************************** 使用資料交換位置,從小到大排序 [130321, 104976, 83521, 65536, 50625, 38416, 28561, 20736, 14641, 10000, 6561, 4096, 2401, 1296, 625, 256, 81, 16, 1, 0] '''

選擇排序

時間效率O(n²)

原理:依次選出一個數據(作為初始資料),然後依次與其他資料進行比較,找出最小(最大)的資料,然後和初始資料交換位置。

#從中選出一個數據(作為最小資料),然後和其他的資料依次比較,如果有更小的資料,那麼就一次比較。
def select_sort(data):
    for i in range(len(data)-1):#需要選擇的次數
        min = i
        for j in range(i+1,len(data)):#用於找到最小值所在的位置
            if data[min] > data[j]:
                min = j
        data[min],data[i] = data[i],data[min]#找到最小值所在的位置後,進行交換位置。
    return data

import random
data_list=[i*i for i in range(10)]
random.shuffle(data_list)
print("使用索引交換位置,從小到大排序",select_sort(data_list))      


print('*'*40)

#選擇排序
#從中選出一個數據(作為最小資料),然後和其他的資料依次比較,如果有更小的資料,那麼就一次比較。
def select_sort(data):
    for i in range(len(data)-1):#需要選擇的次數
        min = data[i]
        for j in range(i+1,len(data)):#用於找到最小值所在的位置
            if min > data[j]:
                min = data[j]        
        data[data.index(min)],data[i] = data[i],data[data.index(min)]#找到最小值所在的位置後,進行交換位置。
    return data

import random
data_list = list(range(30))
#用於生成列表
random.shuffle(data_list)
#用於打亂列表
data_list
print("使用資料交換位置,從小到大排序",select_sort(data_list))    


print('='*40)

#選擇排序
#從中依次選擇出一個數據(進行比較),然後和其他資料進行比較,然後更換索引,或者直接交換資料本身

def select_sort(data):
    for i in range(len(data)-1):
        max = i
        for j in range(i+1,len(data)):
            if data[max] < data[j]:
                max = j
        data[i],data[max] = data[max],data[i]
    return data

import random
data_list = [i**3 for i in range(23)]
random.shuffle(data_list)
print("使用索引交換位置,從小到大排序",select_sort(data_list))

print('*'*40)

#選擇排序
#來來交換資料的本身,從大到小排序

def select_sort(data):
    for i in range(len(data)-1):
        max = data[i]
        for j in range(i+1,len(data)):
            if max < data[j]:
                max = data[j]
        data[data.index(max)],data[i] = data[i],data[data.index(max)]
    return data

import random
data_list = [i**4 for i in range(20)]
random.shuffle(data_list)
print("使用資料交換位置,從小到大排序",select_sort(data_list))
#結果
'''
使用索引交換位置,從小到大排序 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
****************************************
使用資料交換位置,從小到大排序 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
========================================
使用索引交換位置,從小到大排序 [10648, 9261, 8000, 6859, 5832, 4913, 4096, 3375, 2744, 2197, 1728, 1331, 1000, 729, 512, 343, 216, 125, 64, 27, 8, 1, 0]
****************************************
使用資料交換位置,從小到大排序 [130321, 104976, 83521, 65536, 50625, 38416, 28561, 20736, 14641, 10000, 6561, 4096, 2401, 1296, 625, 256, 81, 16, 1, 0]
'''