插入排序有兩種,一種是穩定的直接插入排序,一種是不穩定的希爾插入排序。下面就簡單介紹一下兩個排序演算法以及**實現。
# coding: utf-8
# 直接插入排序:首先將第乙個元素看成有序序列,從第二個開始,將當前元素
# 與前面的有序序列的最後乙個元素進行比較,如果當前元素大,則直接i++判斷下乙個
# 否則插入到前面有序序列中的合適位置,若當前元素與有序序列中的某一元素相等,則
# 插入此元素的後面,所以排序演算法是穩定的,時間複雜度是o(n^2)
class directinsertsort:
def __init__(self, data):
self.data = data
def sort(self):
data = self.data
n = len(data)
for i in range(1, n): # 認為第乙個元素是有序的,從第二個元素開始和前面的有序陣列比較插入
if data[i]=0 and data[j]>t: # data[j]>t 表示穩定
data[j+1] = data[j]
j-=1
data[j+1] = t
return data
def main():
try:
data = [int(x) for x in input('請輸入需要排序的陣列,以空格分隔').strip().split(' ')]
except:
print('輸入不合法')
else:
s = directinsertsort(data)
print('排序前的陣列:', end=' ')
print(s.data)
ans = s.sort()
print('排序後的陣列:', end=' ')
print(ans)
if __name__ == '__main__':
main()
希爾排序是根據直接插入排序提出來的,利用樹的結構特性,在某些情況下可以提高排序的效率。# coding: utf-8
# 希爾排序:取m個子長度,每次比較當前元素和
# (當前元素下標+子長度)的元素,重複m次。希爾排序是不穩定的,
class shellinsertsort:
def __int__(self, data):
pass
def shellsort(self,data):
n = len(data)
d = n//2
while d>=1:
data = self.sort(data, d, n)
d = d // 2
return data
def sort(self, data, d, n):
for i in range(d, n):
if data[i]= 0 and data[j] > t: # data[j]>t 表示穩定
data[j + d] = data[j]
j -= d
data[j + d] = t
return data
def main():
try:
data = [int(x) for x in input('請輸入需要排序的陣列,以空格分隔').strip().split(' ')]
except:
print('輸入不合法')
else:
s = shellinsertsort()
print('排序前的陣列:', end=' ')
print(data)
ans = s.shellsort(data)
print('排序後的陣列:', end=' ')
print(ans)
if __name__ == '__main__':
main()
排序演算法之插入排序Python
介紹一種新的排序演算法,插入排序。先想想一下在玩撲克牌時的動作,當剛開始發完牌時,每個人都需要整理手中的牌,那麼我們排序時,就需要從亂序中的牌中拿出一張牌,將這張牌和已經排好序的牌進行比較,從而放到正確的位置。以此類推,直到排好所有的牌。比如,手中有5張牌,無序。首先從這五張牌中隨便拿出一張,因為最...
Python排序演算法之插入排序
插入排序的工作原理是,對於每個未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。步驟 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果被掃瞄的元素 已排序 大於新元素,將該元素後移一位 重複步驟3,直到找到已排序的元素小於或者等於新元素的...
排序演算法之插入排序
排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...