首页 > 编程知识 正文

数据结构c语言版时间复杂度,c语言算法时间复杂度

时间:2023-05-04 00:57:35 阅读:14162 作者:1912

目的:掌握合并排序的基本思想和过程、代码实现、时间复杂度

1、基本思想和过程:首先递归分解数列,然后综合数列(分治思想的典型应用) ) ) ) ) ) ) ) 65 )

)将一个数组划分为a、b两组,继续划分两组,直到每组只有一个元素。

)根据拆分过程逐步整合集团。 每个组最初只有一个因素,可以视为组内部有序,整合组可以视为整合两个有序数组的过程。

)3)对于左右两个小数列,重复步骤2,直到各区间变为一个个数。

对数组【42、20、17、13、28、14、23、15】进行合并排序,模拟的排序步骤如下所示。

步骤1 )要分割数组,必须总共分割三次(logN );

第一次分解为【42、20、17、13】、【28、14、23、15】,

第二次是【42、20】、【17、13】、【28、14】、【23、15】、

第三次是【42】、【20】、【17】、【13】、【28】、【14】、【23】、【15】;

步骤2 )采用逐步合并数组,合并两个有序数组的方法,每个算法的复杂度基本接近o(n )

第一次合并为【20,42】、【13,17】、【14,28】、【15,23】

第二次合并为【13、17、20、42】、【14、15、23、28】、

第三次合并为【13、14、15、17、20、23、28、42】

2、代码实现:

(1)辅助函数(合并两个有序数组的方法Merger(a,b ) ) ) ) ) ) ) ) ) )。

函数合并器(a,b ) {var n=a a.length; var m=b b.length; var c=[]; var i=0,j=0; while(Inj )

{if(a[I]

c.push(a[I]; elsec.push(b[j];

}while(I

c.push(a[I]; while(j

c.push(b[j];

console.log ('数组',a,'和',b,'组合使用',c ) returnc;

}

)2)合并步骤如下

功能合并_ sort (arr ) {

console.log(arr ) if ) arr.length==1) returnarrvarmid=math.floor (arr.length/2 ) ) ) ) ) )。

varleft=Arr.slice(0,mid ) var right=arr.slice (mid ) returnmerger ) merge_sort (left ) merge _ sort ) right //

}

3、时间复杂度: o(n*logn ) ) ) ) ) ) ) ) ) )。

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