排序演算法之插入排序(Python3實現)

2021-09-23 10:31:25 字數 2067 閱讀 9626

插入排序有兩種,一種是穩定的直接插入排序,一種是不穩定的希爾插入排序。下面就簡單介紹一下兩個排序演算法以及**實現。

# 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 後時,...