如有錯誤,請指出,多謝。
**來自菜鳥教程,多謝。
一:插入排序
插入排序的基本思想是:每步將乙個待排序的記錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止
import random
def insertsort(arr):
for i in range(1,len(arr)):
#獲取前乙個下標和當前數字
index = i - 1
num = arr[i]
#當滿足條件時,執行此while語句
while index >= 0 and arr[index] > num:
#如果前乙個數大於當前數,交換
arr[index+1] = arr[index]
#把下標減1,繼續判斷,如果滿足,繼續執行while迴圈
index -= 1
arr[index+1] = num
print("排序後:",arr)
if __name__ == '__main__':
arr =
x = random.randint(2,20)
for i in range(0,x):
print("排序前:",arr)
insertsort(arr)
二:希爾排序
它實際上是插入排序的高階,分組插入排序
import math
import random
def shellsort(arr):
#立個flag
flag = 1
#用於獲取flag數
while(flag < len(arr)/3):
#1*3+1,4*3+1,7*3+1
flag = flag*3+1
while flag > 0:
#插入排序
for i in range(flag,len(arr)):
index = i - flag
num = arr[i]
while index >= 0 and arr[index] > num:
arr[index+flag] = arr[index]
index -= flag
arr[index+flag] = num
flag = math.floor(flag/3)
print("排序後:",arr)
if __name__ == '__main__':
arr =
x = random.randint(2,20)
for i in range(0,x):
print("排序前:",arr)
shellsort(arr)
三:歸併排序
歸併操作的工作原理如下:
第一步:申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列
第二步:設定兩個指標,最初位置分別為兩個已經排序序列的起始位置
重複步驟3直到某一指標超出序列尾
將另一串行剩下的所有元素直接複製到合併序列尾
import random
def mergesort(arr):
#遞迴出口
if len(arr) < 2:
return arr
#將傳入的陣列分為兩部分,放入新的陣列
middle = int(len(arr)/2)
left_arr = arr[0:middle]
right_arr = arr[middle:]
#遞迴呼叫
return merge(mergesort(left_arr),mergesort(right_arr))
def merge(left_arr,right_arr):
# print(left_arr,right_arr)
result =
#當兩個陣列均不空時,將小的放入新陣列
while left_arr and right_arr:
if left_arr[0] < right_arr[0]:
else:
#當其中乙個陣列空時
while right_arr:
while left_arr:
# print(result)
return result
if __name__ == '__main__':
arr =
x = random.randint(2,20)
for i in range(0,x):
print("排序前:",arr)
print("排序後:",mergesort(arr))
插入 希爾 歸併排序演算法, python編寫
其排序時間複雜度為 nums 54,26,93,17,77,31,44,55,20 for i in range 1,len nums currentvalue nums i position i while position 0 and currentvalue在最壞的情況下,插入排序演算法的比較...
插入排序,希爾排序,歸併排序
public class mainclass shellsort1 arr foreach var item in arr console.readkey static void shellsort1 int arr arr j step temp step step 2 static void i...
選擇 冒泡 歸併 插入及希爾排序
選擇排序每次遍歷一遍陣列,找出最小的數,然後跟陣列的第乙個元素交換。再從剩下的元素中重複此步驟直至陣列排序完畢。時間複雜度與輸入資料無關,為o n 2 每次從首元素開始,從左到右交換相鄰且逆序的元素,一直交換到尾元素時即完成一輪迴圈,此時末尾元素即為最大值。接著在除尾元素外的剩餘元素中繼續上述迴圈,...