Python算法

 

#coding:utf-8
"""
[1]. http://www.cnblogs.com/eniac12/p/5329396.html
"""
def bubble_sort(para_list, ordered = True):
'''
冒泡排序
原理:依次重複訪問每個須要排序的元素,每次比較相鄰的兩個元素是否符合順序,若不符合就交換,直到沒有不符合順序的爲止。
分類 -------------- 內部比較排序
數據結構 ---------- 數組
最差時間複雜度 ---- O(n^2)
最優時間複雜度 ---- 若是能在內部循環第一次運行時,使用一個旗標來表示有無須要交換的可能,能夠把最優時間複雜度下降到O(n)
平均時間複雜度 ---- O(n^2)
所需輔助空間 ------ O(1)
穩定性 ------------ 穩定
'''
len_para_list = len(para_list)
assert len_para_list >= 2
for i in range(len_para_list - 1, 0, -1):
for j in range(i):
if para_list[j] > para_list[j + 1] and ordered:
para_list[j], para_list[j + 1] = para_list[j + 1], para_list[j]
elif para_list[j] < para_list[j + 1] and not ordered:
para_list[j], para_list[j + 1] = para_list[j + 1], para_list[j]
return para_list

def selection_sort(para_list):
'''
選擇排序
原理:將序列邏輯上分爲已排序序列和未排序序列,在未排序序列中找到最小(大)值,放置到已排序序列的起始(終止)位置,
以後繼續在剩餘未排序的序列元素中尋找最小(大)元素,反知道已排序序列的起始(終止)位置,依次類推,直至排序完成。
分類 -------------- 內部比較排序
數據結構 ---------- 數組
最差時間複雜度 ---- O(n^2)
最優時間複雜度 ---- O(n^2)
平均時間複雜度 ---- O(n^2)
所需輔助空間 ------ O(1)
穩定性 ------------ 不穩定

關於冒泡排序和選擇排序的區別能夠參考http://www.cnblogs.com/banana201/p/4928733.html
:param para_list:
:return:
'''
para_list_len = len(para_list)
for i in range(0, para_list_len):
pos_min = i
for j in range(i + 1, para_list_len):
if para_list[pos_min] > para_list[j]:
pos_min = j
para_list[i], para_list[pos_min] = para_list[pos_min], para_list[i]


if __name__ == '__main__':
# import numpy as np
# arr = np.array([1,2,4,5,3,7,2,1,9])
# arr_order = bubble_sort(arr, False)
# print arr_order

alist = [54, 15, 45, 10, 77, 31, 44, 55, 20]
selection_sort(alist)
print(alist)

 

[1]. http://www.cnblogs.com/eniac12/p/5329396.html html

相關文章
相關標籤/搜索