演算法之選擇排序
阿新 • • 發佈:2018-12-21
1、陣列與連結串列
陣列是連續地儲存在記憶體空間中,陣列的第一個元素所在的位置是從0開始的,通常稱為第一個元素的索引位置為0。當我們知道一個數據的長度(通過len()方法去測量),就可以根據索引取出這個資料裡面的資料。 連結串列是不連續的儲存在記憶體空間。連結串列中的第一個元素中儲存著下一元素的地址資訊,若要在連結串列中查詢某個資料,則需要從頭到尾依次進行查詢。
* 兩者的區別:
A、隨機查詢: 陣列:由於資料是連續儲存的,所以能夠很容易地根據它的索引查詢到對應的數值————O(1); 連結串列:跳躍性查收資料時,需要全表依次從頭開始查詢————O(n); B、插入、刪除資料: 陣列:除尾部插入資料外,在指定位置上插入或者刪除資料後,該位置後面地資料都需要向後或者向前進行移動,若插入資料時,記憶體空間下一位置已被佔用,則需要將陣列中共所有資料拷貝到其他位置————O(n);
2、程式碼實現
class Sortlist(object): """ 將無序列表變為有序列表,升序 """ def __init__(self, list): self.list = list self.result = [] self.min_num = list[0] self.min_index = 0 def find_min_num(self): for i in range(1, len(self.list)): if self.list[i] < self.min_num: self.min_num = self.list[i] self.min_index = i return self.min_index def add_to_list(self,num): self.result.append(num) self.list.remove(num) def back_zero(self): self.min_index = 0 self.min_num = self.list[0] def main(self): while len(self.list) > 0: if len(self.list) > 1: num = self.find_min_num() self.add_to_list(self.list[num]) self.back_zero() else: self.add_to_list(self.list[0]) return self.result list = [17, 5, 8, 53, 87, 12, 19, 99, 23] sort_li = Sortlist(list) print(sort_li.main())
結果: