首页 > 编程知识 正文

qpython,python合并列表并排序

时间:2023-05-05 23:44:11 阅读:20773 作者:3328

个人资料

合并排序(Merge Sort )是一种非常高效的排序方法,运用了分割统治的思路。 基本的排序思路是先将整个序列分成两部分,然后对各组中的两个元素排序。 接下来是组与组的合并。 只需遍历两个组中的所有元素一次,即可按顺序合并。 因此,最终所有组合都成为一对时,整个数列都会进行排序。

算法的实现步骤

将长度为n的输入序列分为长度为n/2的两个子序列;

对这两个子序列分别进行递归排序;

提取已排序的两个子序列的元素,并按顺序组合为一个最终序列,从而完成排序。

Python代码的实现

# merge_sort代码的实现

来自类型导入列表

defmerge(ARR1:list[int],arr2:List[int] ) :

result=[]

while arr1 and arr2:

if arr1[0] arr2[0]:

result.append(arr1.pop(0) ) ) ) ) ) ) )。

else:

result.append(ARR2.pop(0) ) ) ) ) ) ) ) )。

if arr1:

result =arr1

if arr2:

result =arr2

返回结果

def merge _ sort (arr : list [ int ] ) :

''''

合并排序

:param arr:要排序的列表

:return:系列列表

''''

iflen(arr )=1:

返回arr

mid=len(arr )/2

返回合并(merge_sort ) arr[:mid],合并_ sort ) arr[mid:] )

#测试数据

if __name__=='__main__':

导入随机

Random.seed(54岁)。

arr=[ random.randint (0,100 ) for_inrange ) 10]

print ('原始数据:',arr )

arr_new=merge_sort(arr )

print ()合并排序结果: ",arr_new "

#输出结果

原始数据: [ 17,56,71,38,61,62,48,28,57,42 ]

合并结果: [17、28、38、42、48、56、57、61、62、71]

动画演示

算法分析

时间的复杂性

合并时间复杂度公式:排序总时间=子序列的排序时间合并时间。

如果序列中有$n$个的排序时间为$tleft(nright ) $

$$

tleft(nright )=2tleft d frac { n } {2}right )text{合并时间}

$$

合并时,两个子序列已经在组中排序,因此当将两个排序序列组合成一个较大的排序序列时,时间复杂度为$n$,如下所示

$$

tleft(n ) right )=2tleft ) dFrac{n}{2} ) right ) n

$$

通过递归推导,可以发现:

$$

tleft(n ) right )=2^mt ) left ) dFrac{n}{2^m}right ) mn

$$

$d如果frac { n } {2^ m }=1$,则递归退出。 在这种情况下,可以:

$$

tleft(1) right )=0,tleft(1 ) right )=nlog _2n

$$

因此,合并排序的时间复杂度为$o(nlog_2n ) $

空间复杂性

每次递归都需要辅助表,长度与要排序的表相同。 递归次数为$o(log_2n ) $,但每次递归都会释放二次空间,下次递归的堆栈空间和二次空间与此部分释放的空间无关。 因此,空间的复杂性为$o(n ) $。

稳定性

在合并排序过程中,确保相等元素的相对位置保持不变,因此排序是稳定的。

综合评价

时间复杂性(平均)

时间复杂性(最高) )

时间的复杂性(最差)

空间复杂性

排序方法

稳定性

$o(nlog_2n ) $

$o(nlog_2n ) $

$o(nlog_2n ) $

$o(n ) $

出局-游戏

稳定

联系你

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。