流程:
把0到n個元素中的最大值放在n位置
把0到n-1個元素中的最大值放在n-1位置
把0到n-2個元素中的最大值放在n-2位置
… …
時間複雜度:嚴格的o(n2)的演算法(即使資料已經排好序,還要全部按照程式流程比較、交換一遍,所以稱為嚴格o(n2))
**:
#氣泡排序演算法
defbubbling_sort
(lst):if
len(lst)==0
orlen
(lst)
<2:
return
for i in
range(1
,len
(lst)):
j = i-
1while j>=
0and lst[j]
> lst[j+1]
: swap(lst,j,j+1)
j = j-
1def
swap
(lst,a,b)
: c = lst[a]
lst[a]
= lst[b]
lst[b]
= c'''
隨機產生0~10000之間的100個數進行排序
演算法執行兩百次耗時的平均值為:0.0085s
'''
流程:
找出第0到n個元素中的最小值放在0位置
找出第1到n個元素中的最小值放在1位置
找出第2到n個元素中的最小值放在2位置
… …
時間複雜度:嚴格的o(n2)
**:
def
selection_sort
(lst)
:for i in
range
(len
(lst)-1
):min_index = i
for j in
range
(i+1
,len
(lst)):
if lst[j]
: min_index = j
swap(lst,i,min_index)
defswap
(lst,a,b)
: c = lst[a]
lst[a]
= lst[b]
lst[b]
= c'''
隨機產生0~10000之間的100個數進行排序
演算法執行兩百次耗時的平均值為0.01s
'''
流程:
首先比較1位置數和0位置數,若1位置數小於0位置數則交換。到此前兩個數已經排好了。
3位置數和2位置數比較,若小則交換,若交換到2位置則和1位置數比較,小則交換。到此前三個數已經排好。
4位置數和3位置數比較,小則交換,若交換到3位置則和2位置比較,小則交換,若交換到2位置則和1位置數比較,小則交換,到此前4個數已經排好。
依次類推,像撲克牌一樣,把新的牌插入到前面已經排好序的牌當中,使得前面的全比它小,後面的全比它大。按照此方式,直到最後乙個數。
時間複雜度:o(n)~o(n2) 之間,若是乙個已經排好序的資料列表,那麼只需要兩個相鄰的資料進行比較,並不需要交換,所以複雜度為o(n),若是乙個完全逆序的資料列表,那麼每個位置的資料都需要和前面的全部數逐個進行交換,因此複雜度為o(n2)。所以複雜度在o(n)~o(n2) 之間,受資料排序情況的影響。
**:
def
insertion_sort
(lst):if
len(lst)==0
orlen
(lst)
<2:
return
for i in
range(1
,len
(lst)):
j = i-
1while j>=
0and lst[j]
> lst[j+1]
: swap(lst,j,j+1)
j = j-
1def
swap
(lst,a,b)
: c = lst[a]
lst[a]
= lst[b]
lst[b]
= c'''
隨機產生0~10000之間的100個數進行排序
演算法執行兩百次耗時的平均值為0.0003s
'''
《演算法》選擇排序 插入排序 氣泡排序
選擇排序,演算法 p156 package algorithm public class selection p156 for int i 0 i n i public static void main string args test.sort a 思路 將第乙個元素與剩餘所有元素相比,如果有比第...
排序演算法 氣泡排序 選擇排序 插入排序
氣泡排序演算法 氣泡排序是最簡單的排序演算法之一。此演算法具有二次方程增長階,因此僅適合排序小列表。氣泡排序演算法是階o n 2 的演算法 package com.szy.structure.sort public class bubblesort system.out.println 排序前 fo...
排序演算法 氣泡排序 插入排序 選擇排序
2 穩定性 2.氣泡排序 3.插入排序 4.選擇排序 5.總結 對於演算法,我們首先考慮的就是其時間複雜度和空間複雜度。1 時間複雜度 另外,由於序列順序不一定,不同情況下的時間複雜度也不同,所以我們還要考慮最好情況和最壞情況。2 空間複雜度 這裡引入了乙個新的概念,我們把o 1 的空間複雜度的排序...