1. 程式人生 > >演算法之選擇排序

演算法之選擇排序

1、陣列與連結串列

陣列是連續地儲存在記憶體空間中,陣列的第一個元素所在的位置是從0開始的,通常稱為第一個元素的索引位置為0。當我們知道一個數據的長度(通過len()方法去測量),就可以根據索引取出這個資料裡面的資料。 在這裡插入圖片描述 連結串列是不連續的儲存在記憶體空間。連結串列中的第一個元素中儲存著下一元素的地址資訊,若要在連結串列中查詢某個資料,則需要從頭到尾依次進行查詢。 在這裡插入圖片描述

* 兩者的區別:

A、隨機查詢: 陣列:由於資料是連續儲存的,所以能夠很容易地根據它的索引查詢到對應的數值————O(1); 連結串列:跳躍性查收資料時,需要全表依次從頭開始查詢————O(n); B、插入、刪除資料: 陣列:除尾部插入資料外,在指定位置上插入或者刪除資料後,該位置後面地資料都需要向後或者向前進行移動,若插入資料時,記憶體空間下一位置已被佔用,則需要將陣列中共所有資料拷貝到其他位置————O(n); 在這裡插入圖片描述

連結串列:在指定位置插入或者刪除資料,只需要變動該位置前面節點中下一節點地儲存地址————O(1); 在這裡插入圖片描述

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())

結果: 在這裡插入圖片描述