排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)

shixiu_yuan發表於2018-12-14

氣泡排序(Bubble Sort)

工作原理:
<1>.比較相鄰的元素。如果第一個比第二個大,就交換它們兩個;
<2>.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;
<3>.針對所有的元素重複以上的步驟,除了最後一個;
<4>.重複步驟1~3,直到排序完成。

obj = [10,4,29,5,7,80,34,19,8]
length = len(obj)
for i in range(length):
	for j in range(length-1-i):
		if obj[j] > obj[j+1]:
			obj[j],obj[j+1] = obj[j+1], obj[j]
print(obj)

選擇排序(Selection-sort)

工作原理:
<1>首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,
<2>然後,再從剩餘未排序元素中繼續尋找最小(大)元素,
<3>然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
‘’’

obj = [10,4,29,5,7,80,34,19,8]
length = len(obj)
for i in range(length):
	for j in range(i+1,length):
		if obj[i] > obj[j]:
			obj[i],obj[j] = obj[j], obj[i]
print(obj)

插入排序(Insertion-Sort)

工作原理:
<1>.從第一個元素開始,該元素可以認為已經被排序;
<2>.取出下一個元素,在已經排序的元素序列中從後向前掃描;
<3>.如果該元素(已排序)大於新元素,將該元素移到下一位置;
<4>.重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;
<5>.將新元素插入到該位置後;
<6>.重複步驟2~5。

obj = [10,4,29,5,7,80,34,19,8]
length = len(obj)
for i in range(length):
	for j in range(i,0,-1):
		if  obj[j-1]>obj[j]:
			obj[j-1],obj[j] = obj[j], obj[j-1]
print(obj)

希爾排序(Shell Sort)

先取一個小於n的整數d1作為第一個增量,把檔案的全部記錄分組。所有距離為d1的倍數的記錄放在同一個組中。先在各組內進行直接插入排序;然後,取第二個增量d2<d1重複上述的分組和排序,直至所取的增量 =1( < …<d2<d1),即所有記錄放在同一組中進行直接插入排序為止一般的初次取序列的一半為增量,以後每次減半,直到增量為1。

def insertSort(l,length):#對每一種增量中的每一組各自進行排序
    for i in range(len(l)//length):
        for j in range(i,0,-length):
            if l[j]<l[j-length]:
                l[j],l[j-length] = l[j-length],l[j]
    return l
obj = [10,4,29,5,7,80,34,19,8,10,11]
length = len(obj)#增量


while length>1:#迴圈所有增量的可能性
    length//=2
    result = insertSort(obj,length)
print(result)

相關文章