初學python,對幾個排序稍做整理,如有錯誤還請指出。
#seletion sort 在一組數中選擇最小的放在第乙個
def seletion sort1(l)
:for i in
range
(len
(l)-1)
: min_=i
for j in
range
(i+1
,len
(l))
:#選擇最小的數
if l[j]
:min_=j #遍歷之後找到最小的
l[min_]
,l[i]
=l[i]
,l[min_]
#把最小的交換到前面
return ll=[
3,2,
6,5]
seletion sort1(l)
#seletion sort2 運用巢狀函式
def seletion sort2(l)
:def
find_min
(l):
min_=
0for i in
range
(len
(l))
:if l[i]
:min_=i
return min_
for i in
range
(len
(l)-1)
: min_=find_min(l[i:])
#這個min-對應的索引是列表切片後的
#新列表中的索引,所以需要返回原列表中的索引需要加i
l[min_+i]
,l[i]
=l[i]
,l[min_+i]
#min_+i返回原來列表中的索引
return ll=[
1,5,
7,9,
3,2,
4]seletion sort2(l)
# 遞迴實現選擇排序
def seletion sort3(l)
: l=l[:]
#雖然後面是切片操作會產生新列表不會影響到原列表,但
#是在第一次比較時會改變原來列表的值,所以需要先複製
iflen
(l)<=1:
return l
min_=
0for i in
range(1
,len
(l))
:#把第乙個數和後面n-1個數比較,找到最小的放到第乙個位子上
if l[i]
:min_=i
l[min_]
,l[0
]=l[0]
,l[min_]
return
[l[0]]
+ss3(l[1:
])l=[
3,4,
2,5,
3,6,
2]seletion sort3(l)
#插入排序 將乙個待排序的數插入到前面已經排好序的列表當中 保證插入元素後的列表還是有序的
definsertion
(l,a)
:for i in
range
(len
(l))
:if l[i]
>a:
return l[
0:i]
+[a]
+l[i:
len(l)
]return l+
[a]def
insertion_sort
(l):
l0=for i in l:
l0=insertion(l0,i)
return l0l=[
3,4,
1,6,
2,3]
insertion_sort(l)
#法一優化
definsertion
(l,i)
: a=l[i+1]
for index in
range
(i+1):
if l[index]
>a:
break
else
:index=i+
1for k in
range
(i+1
,index,-1
):l[k]
=l[k-1]
l[index]
=a return l
definsertion_sort
(l):
for i in
range
(len
(l)-1)
: l=insertion(l,i)
return ll=[
3,2,
4,1,
5,4]
insertion_sort(l)
#運用遞迴
definsertsort
(l):
defr_insertsort
(r,l):if
len(l)==0
:return r
for i in
range
(len
(r))
:if l[0]
<=r[i]
:return r_insertsort(r[
0:i]
+[l[0]
]+r[i:
],l[1:
])return r_insertsort(r+
[l[0]]
,l[1:]
)return r_insertsort(
,l)l=[5
,6,4
,3,2
,1]insertsort(l)
from random import randint
defquicksort
(l):
iflen
(l)<=1:
return l
l1=;l2=
r=randint(0,
len(l)-1
)for i in
range(0
,r):
if l[i]
<=l[r]
)else
)for i in
range
(r+1
,len
(l))
:if l[i]
<=l[r]
)else
)return quicksort(l1)
+[l[r]
]+quicksort(l2)l=[
2,6,
5,3,
1,0,
3]quicksort(l)
#歸併排序
defmerge
(a,b):if
len(a)==0
:return b
elif
len(b)==0
:return a
if a[0]
>b[0]
:return
[b[0]]
+merge(a,b[1:
])else
:return
[a[0]]
+merge(a[1:
],b)
defmergesort
(l):
iflen
(l)<=1:
return l;
l1=mergesort(l[0:
len(l)//2
])l2=mergesort(l[
len(l)//2
:])return merge(l1,l2)l=[
5,2,
3,6,
91]mergesort(l)
插入排序 選擇排序
插入排序 有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序法 插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度 為o...
排序 選擇排序 插入排序
選擇排序應該說是最簡單的排序演算法,它的核心思想是不斷地選擇剩餘元素中最小者。選擇排序的過程是 首先,找到陣列中最小的元素,然後將它與陣列中的第乙個元素交換位置 如果第乙個元素是最小的元素,則和自己交換 接著,從剩下的元素中找到最小的元素,將它與陣列中的第二個元素交換位置。如此往復,直到將整個陣列排...
Python實現氣泡排序,選擇排序,插入排序
1.python實現氣泡排序 方法1array 4,5,2,3,8,9,1 def bubblesort array sort true while sort sort false for i in range len array 1 if array i array i 1 temp array ...