日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

排序算法四:归并排序基本原理以及Python实现

發(fā)布時(shí)間:2023/12/2 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法四:归并排序基本原理以及Python实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 基本原理

歸并排序建立在歸并操作上的一種算法。該算法是采用分治法(Divide and Conquer)的一個(gè)非常典型的應(yīng)用。歸并排序是將兩

個(gè)已經(jīng)有序的序列合成一個(gè)有序的序列的過程。

因此,對(duì)于一個(gè)待排序的序列來(lái)說,首先要將其進(jìn)行分割,得到有序的子序列,再進(jìn)行歸并操作,最終得到有序的序列。

歸并的基本思想

假設(shè)有兩個(gè)有序的序列,需要合成一個(gè)序列。其實(shí)就是不斷的比較兩個(gè)序列開頭的元素大小就可以。

if a[0] > b[0]

將a[0]存入另一個(gè)設(shè)置好的空序列C中

else

將b[0]存入另一個(gè)設(shè)置好的空序列C中

if length(a)==0 或者length(b)==0

上述操作結(jié)束

總體的思想就是不斷的比較兩個(gè)序列的第一個(gè)元素并存入第三個(gè)序列中,再釋放原序列中的第一個(gè)元素。

分割的基本思想

分割就是將原序列不斷的進(jìn)行分割,以便得到有序的子序列,進(jìn)行歸并操作。整理介紹二分割。就是在序列的中間進(jìn)行分割。

顯然,對(duì)于比較長(zhǎng)的序列需要進(jìn)行多次的分割操作,使得每個(gè)子序列的元素個(gè)數(shù)只有一個(gè)。只有這樣,才能得到有序的子序列,進(jìn)

行歸并操作。

這樣話就需要對(duì)原序列進(jìn)行一個(gè)遞歸的分割操作。得到最終的我們需要的子序列。

一個(gè)例子

這里有一個(gè)隨機(jī)生成的包含了10個(gè)元素的待排序的序列

[92,79,37,39,98,62,64,33,9,5]

按照上述的基本思想,其分割和歸并的流程為:

從上面可以很清楚的看到,首先需要進(jìn)行分割,然后對(duì)分割的子序列進(jìn)行一個(gè)歸并操作,最終得到排序完成
的新序列。

2. Python實(shí)現(xiàn)

歸并操作實(shí)現(xiàn)

def mergeTwoArray(a,b):m=a.__len__()n=b.__len__()c=[]while m>0 and n>0:if a[0]<b[0]:c.append(a[0])a.pop(0)m=a.__len__()#k+=1else:c.append(b[0])b.pop(0)n=b.__len__()while m>0 and n==0:c.append(a[0])a.pop(0)m=a.__len__()while n>0 and m==0:c.append(b[0])b.pop(0)n=b.__len__()return c

歸并排序?qū)崿F(xiàn)

def myMergeSort(a):if a.__len__()<=1:return amiddleIndex=a.__len__()//2leftArray=myMergeSort(a[:middleIndex])#左邊有序#print('左邊序列有序的過程:')print(leftArray)#print()rightArray=myMergeSort(a[middleIndex:])#右邊有序#print('右邊序列有序的過程:')print(rightArray)return mergeTwoArray(leftArray,rightArray)#再合并兩個(gè)有序的小數(shù)組,實(shí)現(xiàn)歸并的思想

輸出結(jié)果

3. 時(shí)間復(fù)雜度分析

并排序的效率是比較高的,設(shè)數(shù)列長(zhǎng)為N,將數(shù)列分開成小數(shù)列一共要log2N步,每步都是一個(gè)合并有序數(shù)列的過程,時(shí)間復(fù)雜

度可以記為O(N),故一共為O(Nlog2N)。因?yàn)闅w并排序每次都是在相鄰的數(shù)據(jù)中進(jìn)行操作,所以歸并排序在O(N?log2N)

的幾種排序方法(快速排序,歸并排序,希爾排序,堆排序)也是效率比較高的。

總結(jié)

以上是生活随笔為你收集整理的排序算法四:归并排序基本原理以及Python实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。