1. 程式人生 > >演算法(插入、希爾、冒泡)

演算法(插入、希爾、冒泡)

演算法學習技巧
先問自己幾個問題
什麼是什麼? 為什麼要這麼寫? 穩定性? 時間複雜度? 氣泡排序 是什麼:首先拿到第1個元素,和它第二個比較,較大的放右邊;第二個與第三個比,一直重複下去 ,最後一個就是最大的數 為什麼:總共有n個數,主要是控制輪數,第二個是控制次數。比的次數 為:n-1 穩定性 時間複雜度 方法一: def Bubble(arr): for i in range(len(arr)): for j in range(len(arr)-1-i): if arr[j]>arr[j+1]: arr[j],arr[j+1]=arr[j+1],arr[j] return arr arr=[9,3,6,2,0,6] print(Bubble(arr)) >>> arr=[9,3,6,2,0,6] >>> print(Bubble(arr)) [0, 2, 3, 6, 6, 9] 方法二: def Bubble(arr): i=0 while i<len(arr): print("當前為第%s輪"%i+"***********************************") for j in range(len(arr)-1-i): if arr[j]>arr[j+1]: arr[j],arr[j+1]=arr[j+1],arr[j] print("當前的值得為:",(arr[j],arr[j+1])) i+=1 return arr arr=[9,3,6,2,0,6] print(Bubble(arr)) 方法三: def Bubble(arr): i=0 while i<len(arr): print("當前為第%s輪"%(i+1)+"***********************************") j=len(arr)-1-i while j<i: if arr[j]>arr[j+1]: arr[j],arr[j+1]=arr[j+1],arr[j] #print("當前的值得為:",(arr[j],arr[j+1])) print("當前的陣列為:",arr) j+=1 i+=1 return arr arr=[9,3,6,2,0,6] print(Bubble(arr)) >>> def Bubble(arr): ... i=0 ... while i<len(arr): ... print("當前為第%s輪"%(i+1)+"***********************************") ... j=len(arr)-1-i ... while j<i: ... if arr[j]>arr[j+1]: ... arr[j],arr[j+1]=arr[j+1],arr[j] ... #print("當前的值得為:",(arr[j],arr[j+1])) ... print("當前的陣列為:",arr) ... j+=1 ... i+=1 ... return arr ... >>> arr=[9,3,6,2,0,6] >>> print(Bubble(arr)) 當前為第1輪*********************************** 當前為第2輪*********************************** 當前為第3輪*********************************** 當前為第4輪*********************************** 當前的陣列為: [9, 3, 2, 6, 0, 6] 當前為第5輪*********************************** 當前的陣列為: [9, 2, 3, 6, 0, 6] 當前的陣列為: [9, 2, 3, 0, 6, 6] 當前為第6輪*********************************** 當前的陣列為: [2, 9, 3, 0, 6, 6] 當前的陣列為: [2, 3, 9, 0, 6, 6] 當前的陣列為: [2, 3, 0, 9, 6, 6] 當前的陣列為: [2, 3, 0, 6, 9, 6] 當前的陣列為: [2, 3, 0, 6, 6, 9] [2, 3, 0, 6, 6, 9] >>>
插入排序 方法一 def insertSort(arr): for i in range(1,len(arr)): for j in range(i,0,-1): if arr[j-1]>arr[j]: arr[j-1],arr[j]=arr[j],arr[j-1] return arr arr=[9,3,6,2,0,6] print(insertSort(arr)) ... >>> arr=[9,3,6,2,0,6] >>> print(insertSort(arr)) [0, 2, 3, 6, 6, 9] >>> 方法二 def insertSort(arr): for i in range(1,len(arr)): for j in range(0,i): if arr[j]>arr[i]:#這裡j的位置比I要前面,因為i是從0開始 arr[j],arr[i]=arr[i],arr[j] return arr arr=[9,3,6,2,0,6] print(insertSort(arr)) >>> arr=[9,3,6,2,0,6] >>> print(insertSort(arr)) [0, 2, 3, 6, 6, 9] >>> 方法三: def insertSort(arr): i=1 while i<len(arr): value=arr[i] j=i-1 while j>=0: if arr[j]>value:#這裡j的位置比I要前面,因為i是從0開始 arr[j+1],arr[j]=arr[j],arr[j+1] j-=1 i+=1 return arr arr=[9,3,6,2,0,6] print(insertSort(arr)) >>> arr=[9,3,6,2,0,6] >>> print(insertSort(arr)) [0, 2, 3, 6, 6, 9]

&n