本章內容:
目錄
陣列和鍊錶的基本要點
選擇排序
陣列意味著所有代辦的事項在記憶體中都是相連的,直到每乙個元素的位址
鍊錶可以儲存在記憶體的任何地方,鍊錶的每個元素都儲存了下乙個元素的列表
插入和刪除陣列的時候,鍊錶都很簡單,只需要修改前乙個元素所指向的位址即可;但是陣列需要後面的元素都要移動
陣列用的多一些,支援隨機訪問;鍊錶只能支援順序訪問(乙個接乙個)
陣列和鍊錶的執行時間
operations
陣列 鍊錶
讀取 o(1)
o(n)
插入o(n)
o(1)
刪除o(n)
o(1)
比如把一堆資料需要從大到小的排序,使用選擇排序的意思就是:
每次選擇出所有資料裡面最大的那個資料,然後依次新增到乙個新的列表裡面,遍歷完所有資料,就會得到乙個有序的列表了。
需要的總時間為:o(n×n)= o(n平方)
速度不快
例項:有乙個列表 [4,5,8,1,5,6,12],要對其中的資料 採用選擇排序的方法 進行從小到大的排序
選出列表裡面資料最小的那個
把那個資料放到乙個新的列表裡面
def findsmallest(arr):
#找到最小數的函式
smallest = arr[0]
smallest_index = 0
#對最小數和最小數的索引進行初始化,假設便是最開始的那是數以及0
for i in range(1,len(arr)):
#遍歷列表中的每乙個元素找到其中的最小數及其位置
if arr[i] < smallest:
#如果 arr[i] 這個數比smallest小的話那麼那個最小數就會被新的數代替
smallest = arr[i]
smallest_index = i
return smallest_index
def selectionsort(arr):
#主函式
newarr =
#新建乙個列表來裝資料
for i in range(len(arr)):
#遍歷列表中的每乙個元素
smallest_index = findsmallest(arr)
#找到原來列表中的最小的那個數
#新的那個列表加入被刪除的那個元素
#注意:pop(index)會將列表中的該位置的元素刪除並且返回被刪除的元素
return newarr
print(selectionsort([45,6,2,19,3,61,5,6,44]))
錯誤注釋:若是出現了一些錯誤,看看return的縮排位置不太準確
輸出結果:[2, 3, 5, 6, 6, 19, 44, 45, 61]
第二章 快速排序
快速排序演算法也是基於分治思想的一種排序演算法,它的基本操作即為比較 交換。快速排序演算法的基本思想是從待排序的序列中選取乙個比較標準k 通常選取第乙個元素 然後將其餘元素依次跟k進行比較。在比較的過程中將大於k的元素移到k的後面,將小於k的元素移到k的前面,最後的結果是將原始序列分為兩個子串行,而...
演算法 第二章排序
目錄 初級排序 選擇排序 插入排序 希爾排序 歸併排序 自頂向下排序 自底向上排序 快速排序 優先佇列 初級排序 一 選擇排序 簡述 選擇排序就是遍歷一遍陣列把最小的和第乙個數字交換。第二遍遍歷陣列時候選擇和第二個交換,一次類推。注意不要在for迴圈中用a.length 不然每次都要獲取a.leng...
演算法第二章 快速排序
先把快速排序的 實現貼上來,太晚了,過程改天再加上!快速排序就是把乙個數拿出來,然後把小於這個數的扔到一邊,把大於它的扔到一邊,那這個數就在正確的位置上了 然後把這個數的左邊分成乙份,右邊分成乙份,再把這兩份進行剛才的做法,一直不停地這樣做,直到不能再分。接下來就要說明怎麼把小於它的數扔到一邊,大於...