比較相鄰的元素大小,將小的前移,大的後移,就像水中的氣泡一樣,最小的元素經過幾次移動,會最終浮到水面上。
def bubble(list):
for i in range(len(list)):
for j in range(0,len(list)-1-i):
if list[j] > list[j+1]:
list[j],list[j+1]=list[j+1],list[j]
ifname== 'main':
list1 = [2,3,5,7,8,9,6,54,1,42]
bubble(list1)
print(list1)
2.插入排序
將乙個待排資料按其大小插入到已經排序的資料中的適當位置,直到全部插入完畢。
def insertsort(list):
if list != none:
if len(list) == 1:
pass
else:
for i in range(1,len(list)):#start with second item.
temp = list[i]
for j in range(i):
if list[j]>list[i]:
for k in range(i,j,-1):#
list[k]= list[k-1]
list[j] = temp
ifname== 'main':
list1 = [3,2,7,5,8,9,6,54,1,42]
insertsort(list1)
print(list1)
3.快速排序
(1)這裡實現第一輪排序,不妨稱第乙個元素為錨
(2)i,j分別指向待排序序列的第一和最後乙個元素
(3)j與錨比較,若大於錨則左移,直到小於錨的元素停下,與i指向元素交換,i後移
(4)接著,i與錨比較,若小於則右移,直到大於錨的元素停下,與j指向的元素交換,j前移,
(5)i,j交替移動,i==j時,錨temp到達最終位置。
l = [90,89,78,67,56,45,34,23,12,0]
def first_sort(numbers,i,j):
temp = numbers[i]
while i!=j:
while itemp:
j = j - 1
if i < j
numbers[i] = numbers[j]
i = i + 1
while i < j and numbers[i]4.選擇排序
從所有序列中先找到最小的,然後放到第乙個位置。之後再看剩餘元素中最小的,放到第二個位置……以此類推,就可以完成整個的排序工作。
def selectionsort(list):
if list != none:
for i in range(len(list)):
min = i
for j in range(i+1,len(list)):
if list[min] > list[j]:
min = j
if min != i:
list[min],list[i] = list[i],list[min]
ifname== 'main':
list1 = [2,3,5,7,8,9,6,54,1,42]
selectionsort(list1)
print(list1)
5.希爾排序
先將整個待排元素序列分割成若干個子串行(由相隔某個「增量」的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。
test=[9,2,3,5,7]
def shellsort(data,flag):
'''data: list,to be sorted
flag: 0->asc,1->desc
return a new sorted list
'''retdata=
#copy data to retdata
for item in data:
#sort retdata
count=len(retdata)
step=count/2;
while step>0:
i=0while i=0:
if t>=retdata[k]:
retdata.insert(k+1, t)
break
k=k-step
if k < 0:
retdata.insert(0, t)
#desc
elif flag==1:
while k>=0:
if t<=retdata[k]:
retdata.insert(k+1, t)
break
k=k-step
if k<0:
retdata.insert(0, t)
j=j+step
i=i+1
step=step/2
return retdata
data=shellsort(test,0)
print 'asc:',data
data=shellsort(test,1)
print 'desc:',data
推薦拓展閱讀
各種排序演算法的Python實現
最近剛剛接觸python,python語法簡潔清晰,具有很好的易讀性,編寫的演算法可以很容易的看出其本質。故而用python編寫演算法,既可以熟悉演算法,又可以練習python,何樂而不為呢?插入排序 def insertsort lists for i in range 0,len lists 1...
各種排序演算法實現
1 選擇排序 最壞情況 時間複雜度為o n 2 平均時間複雜度o n 2 最好情況 時間複雜度為o n 2 最差空間複雜度 需要輔助空間o 1 不是穩定排序 實現 void swap int a,int b void selectionsort int a,int n if k i swap a i...
各種排序演算法實現
2016年7月7日20 30 37 排序的目的 查詢 排序是查詢的前提 google搜尋 分類 冒泡 穩定o n 2 插入 穩定o n 2 從前往後依次插入到前面的有序部分,始終保持前面部分有序 選擇 n 2 先從所有序列中選擇最小的數字與第乙個數字互換,再從餘下的序列中尋找次最小值與第二個數字互換...