幾種排序演算法的思路及其Python實現

2021-10-02 08:06:13 字數 3171 閱讀 3558

1.快速排序

def

quick_sort

(alist,first,last)

:if first>=last:

return

mid_value=alist[first]

low=first

high=last

while low

while low

>=mid_value:

high-=

1 alist[low]

=alist[high]

while low

low+=

1 alist[high]

=alist[low]

alist[low]

=mid_value

quick_sort(alist,first,low-1)

quick_sort(alist,low+

1,last)

2.氣泡排序
def

sort

(numlist)

: flag=

false

for j in

range

(len

(numlist)-1

):for i in

range

(len

(numlist)-1

):if numlist[i]

>numlist[i+1]

: flag=

true

temp=numlist[i]

numlist[i]

=numlist[i+1]

numlist[i+1]

=temp

ifnot flag:

break

else

: flag=

false

return numlist

3. 插入排序
def

main()

: num_list=[2

,51,3

,40,8

,1,6

]# 從第二個元素開始選擇,插入前面有序元素組中,和有序元素組中最後乙個元素比較

# 若比它大則放在它後面,否則繼續和它前面的元素比較

for i in

range(1

,len

(num_list)):

insert_value=num_list[i]

insert_index=i-

1while insert_index>=

0and insert_value

:# 如果插入值小於有序列表待插入位置的值,則待插入位置的值後移

num_list[insert_index+1]

=num_list[insert_index]

insert_index-=

1 num_list[insert_index+1]

=insert_value

4.選擇排序
def

main()

: numlist=[4

,5,1

,0,5

,88,7

]for i in

range

(len

(numlist)):

min=numlist[i]

for j in

range

(i,len

(numlist)):

ifmin

> numlist[j]

: temp=

minmin

=numlist[j]

numlist[j]

=temp

numlist[i]

=min

for i in

range

(len

(numlist)):

print

(numlist[i]

)

5. 希爾排序
這個鏈結說的比較好懂 :希爾排序思路

def

main()

:"""對陣列分組,初始增量為length/2,後面的分組在前面的基礎上/2,對每個分組

使用插入排序

每一步的結果大體的趨勢是小的大部分都前移了,陣列趨於有序

普通插入法對相對有序的序列插入效率高

"""num_list=[8

,9,1

,70,2

,3,5

,4,6

,0] gap=

len(num_list)

# 第一層迴圈取不同的gap值

while gap>0:

gap=

int(gap/2)

if gap==0:

break

# 第二層迴圈開始對每組進行插入排序

# 從第gap個元素開始,每次向前移動一次,也就換成下一組插入排序了,一共有gap組。但是再經歷gap次又會對第一組排序

for i in

range

(gap,

len(num_list)):

# 這一層迴圈是對上層迴圈遍歷到的元素和與它同一組的之前的所有元素比較

# 它和它同一組的之前的元素索引相差gap

insert_value=num_list[i]

insert_index=i-gap

while insert_index >=

0and insert_value

:# 判斷此時的元素和同組前乙個元素誰大誰小

num_list[insert_index+gap]

=num_list[insert_index]

insert_index=insert_index-gap

num_list[insert_index+gap]

=insert_value

6.常見排序演算法的時間複雜度比較

時間複雜度分析的相關博文:超詳細的演算法複雜度比較

常見排序演算法及其演算法思路解讀

幾種常見的排序演算法及其演算法思路 1.選擇排序 o n方 所謂選擇就是每次都選擇乙個最小的元素放在最前面。思路是去尋找最小元素的座標,然後將最小座標的元素與當前座標的元素交換。具體的做法是假設當前迴圈的第乙個座標是最小元素的座標,然後從第二個元素開始遍歷 內層迴圈 如果該元素比最小座標的的元素小,...

幾種排序演算法及其效率對比

public class bubblesort sort arr system.out.println arrays.tostring arr long start system.currenttimemillis sort arr long end system.currenttimemillis...

幾種排序演算法及其Python實現 插入排序

直接插入排序是一種最簡單的排序方法,它的基本操作是將乙個記錄插入到已排好序的有序表中,從而得到乙個新的 記錄數增1的有序表。def insertsort l none j 0 x 0 for i in range 1,len l if l i l i 1 x l i l i l i 1 for j ...