1.氣泡排序
就像冒泡一樣,從頭對比相鄰的兩個,大的(或者小的)就交換到後面,一直到序列有序。
時間複雜度最壞,平均o(n^2),最好的時候是初始序列有序,第一趟後就不在發生交換,停止排序時間複雜度o(n)。空間複雜度為o(1)。
a =[11
,2,41
,7,22
,80,67
,1,0.1,88
]def
bubble_sorted
(a):
flag =
true
####若某一趟排序沒有發生交換則停止。
index =
0while flag:
b =-1
for i in
range
(len
(a)-1)
:if a[i]
>a[i+1]
: b=
1
a[i]
,a[i+1]
= a[i+1]
,a[i]
i +=
1if b ==-1
: flag =
false
return a
bubble(a)
2. 簡單選擇
每次從後面選擇最大的放到前面,第一次選最大的放第一位置,第二次選第二大的放第二…無論何種情況時間複雜度都為o(n^2)。空間複雜度為 o(1)。
a =[11
,2,41
,7,22
,80,67
,1,0.1,88
]def
get_maxindex
(a):
####獲取最大值的下標
index =-1
tmp =-1
for i in
range
(len
(a))
:if a[i]
>tmp:
tmp = a[i]
index = i
return index
defchoose
(a):
for i in
range
(len
(a))
: a[i]
,a[get_maxindex(a[i+1:
])+i+1
]= a[get_maxindex(a[i+1:
])+i+1
],a[i]
return a
3.快速排序
一趟排序,是選擇乙個基準值,一般為開頭值,結尾值作為對比,設定雙指標,i從頭向後找,找到比基準值大的停下,j從後向前找找到比基準值小的停下,然後交換i和j位置的元素,然後i繼續向後,j繼續向前。直到i大於等於j,這時候交換基準值和i位置的元素。基準值此時所在的位置就是其最終的位置。
然後以基準值為分界,將序列分為左右兩個,繼續執行快排。最好,平均時間複雜度為o(nlogn),最壞的情況是每次基準值,都將序列分為了列表長度-1,和1兩個子列表。即,待排序元素基本有序。
a =[11
,2,41
,7,22
,80,67
,1,0.1,88
,9]def
partition
(arr,low,high)
: i = low
j = high
pivot = arr[high]
while iwhile arr[i]
<=pivot and ii+=
1while arr[j]
>=pivot and ij-=
1 arr[i]
,arr[j]
= arr[j]
,arr[i]
arr[i]
,arr[high]
= arr[high]
,arr[i]
return i
defquick_sorted
(arr,low,high)
:if lowmid = partition(arr,low,high)
quick_sorted(arr,low,mid-1)
quick_sorted(arr,mid+
1,high)
4.歸併排序
將待排序元素,分成左右兩個,再將左右兩個分別再分為兩個,一直到每個排序序列只有乙個元素,
然後再兩兩合併,排序。
a =[2
,1,5
,6,73
,6]def
merge_sorted
(a):
iflen
(a)<=1:
return a
mid =
len(a)//2
larr = merge_sorted(a[
:mid]
) rarr = merge_sorted(a[mid:])
####merge
i,j =0,
0 tmp =
while i<
len(larr)
and j<
len(rarr)
:if larr[i]
i+=1else:)
j+=1 tmp +=
(larr[i:
]+rarr[j:])
return tmp
merge_sorted(a)
常見的排序演算法總結
include 演算法只是比較了元素為整數的內容.大部分的排序只是做了簡單的測試.僅供參考.void swap int a int b bool less int a,int b 對內部中的元素先找到k值,然後分兩塊 int partition int r,int lo,int hi while j...
常見的排序演算法總結
平時一直做專案,業務邏輯,對演算法這塊逐漸有了生疏 今天有空總結一下排序演算法 1 氣泡排序 氣泡排序的原理就是兩兩相比,從小到大的話前面比後面大就交換,從大到大的話前面比後面小就交換,比如有一組數 1,10,5,3,2 如何對它做排序 比如從小到大 第一步 1,10,5,3,2 源資料 1,10,...
常見的排序演算法總結
氣泡排序最常見版 void bubblesort int array,size t len int main bubblesort array,6 for size t i 0 i 6 i cout endl void bubblesort int array,size t len int main...