mergesort求合并排序的算法
mergesort 时间:2021-06-26 阅读:(
)
归并排序这俩步有何作用? MergeSort (nData, iLeft, iMid); MergeSort (nData, iMid + 1, iRight);
这是一个递归的过程 MergeSort (nData, iLeft, iMid);可以认为是将ileft到imid的数据排好序,MergeSort (nData, iMid + 1, iRight)是将imid+1到iRight的数据排好序。
最后用merge操作将排好序的两部分合并就可以了类似于merge sort,分成两部分排序,把数组分成三份,进行递归排序,最终合并,比较前者与后者哪个省时?
从渐进分析(asymptotic analysis)的角度讲,这两种排序的复杂度都是O(nlgn),所以"一样"快。
但从实际来看,很难确定那种方法更快。
把数据分成3份,log的底数会变为3,但是同时前置常数C也会增大,所以很难讲在实际运行中那种算法更省时。
vb归并排序
Sub MergeSort(ByRef a() As Integer, ByVal lo As Integer, ByVal hi As Integer)
mi = (hi + lo) 2
If hi - lo > 0 Then
MergeSort a, lo, mi
MergeSort a, mi + 1, hi
End If
i = lo: j = mi + 1
Do While i <= mi And j <= hi
If a(i) <= a(j) Then
i = i + 1
Else
temp = a(j)
For k = j To i + 1 Step -1
a(k) = a(k - 1)
Next k
a(i) = temp
mi = mi + 1
j = j + 1
End If
Loop
End Sub
Private Sub Command1_Click()
Dim a(1 To 20) As Integer
Cls
Randomize
For i = 1 To 20: a(i) = Int(Rnd * 100 + 1): Next i
MergeSort a, 1, 20
For i = 1 To 20: Print a(i);: Next i
Print
End SubC语言归并排序代码
void?mergeSort(int?a[],int?left,int?right)
{
int?i;
//?保证至少有两个元素
if(left?求合并排序的算法#include<stdlib.h>
2
3//合并过程
4voidmerge(intdata[],intstart,intmid,intend){
5
6
7int*tmpLeft,*tmpRight;
8intleftSize,rightSize;
9intl,r,j;
10
11printArray(data,8);
12printf("
");
13l=0;
14r=0;
15j=0;
16leftSize=mid-start+1;
17rightSize=end-mid;
18
19tmpLeft=(int*)malloc(leftSize*sizeof(int));
20tmpRight=(int*)malloc(rightSize*sizeof(int));
21
22while(j<leftSize){
23tmpLeft[j]=data[start+j];
24j++;
25}
26
27j=0;
28
29while(j<rightSize){
30tmpRight[j]=data[mid+1+j];
31j++;
32}
33
34j=0;
35
36while(l<leftSize&&r<rightSize){
37if(tmpLeft[l]<tmpRight[r]){
38
39data[start+j++]=tmpLeft[l++];
40
41}else{
42
43data[start+j++]=tmpRight[r++];
44}
45}
46
47while(l<leftSize){
48data[start+j++]=tmpLeft[l++];
49}
50
51while(r<rightSize){
52data[start+j++]=tmpRight[r++];
53}
54
55free(tmpLeft);
56free(tmpRight);
57}
58
59
60voidmerge_sort(intdata[],intstart,intend){
61
62intmid;
63if(start<end){
64//将数组划分
65mid=(start+end)/2;
66merge_sort(data,start,mid);
67merge_sort(data,mid+1,end);
68//合并划分后的两个数组
69merge(data,start,mid,end);
70}
71
72}
RAKsmart 商家八月份的促销活动今天更新。基本上和上个月的产品套餐活动差不多的,不过也是有简单的微调。对于RAKsmart商家还是比较了解的,他们家产品虽然这两年增加多个机房,以及在VPS主机方案上有丰富的机房和调整到一些自营机房,他们家的策划能力还是有限,基本上每个月的套餐活动都差不多。RAKsmart 在八月份看到有新增香港高防服务器可选,最高100GB防御。同时原来上个月缺货的日本独立...
Krypt这两天发布了ION平台9月份优惠信息,提供一款特选套餐年付120美元(原价$162/年),开设在洛杉矶或者圣何塞机房,支持Windows或者Linux操作系统。ion.kryptcloud.com是Krypt机房上线的云主机平台,主要提供基于KVM架构云主机产品,相对于KT主站云服务器要便宜很多,产品可选洛杉矶、圣何塞或者新加坡等地机房。洛杉矶机房CPU:2 cores内存:2GB硬盘:...
Sharktech荷兰10G带宽的独立服务器月付319美元起,10Gbps共享带宽,不限制流量,自带5个IPv4,免费60Gbps的 DDoS防御,可加到100G防御。CPU内存HDD价格购买地址E3-1270v216G2T$319/月链接E3-1270v516G2T$329/月链接2*E5-2670v232G2T$389/月链接2*E5-2678v364G2T$409/月链接这里我们需要注意,默...
mergesort为你推荐
renderpartialHtml.RenderPartial 报错pps官网pps软件下载中心 pps影视软件下载pat是什么格式photoshop填充图案是pat格式,需用什么软件打开?请高人指点,谢谢~网站客服代码请问怎么在网页里面加入在线客服系统的代码,代码要怎么获得?医院排队系统医院门诊排队叫号系统防火墙技术应用在网络支付流程中,防火墙技术与数据加密技术应用则重点有什么不同?泛微协同办公系统谁能告诉我泛微OA,协同性是体现在哪几个方面的?泛微有哪些优势??微盟价格做微盟平台的销售怎么样,有前景吗如何查看qq特别关心我的人qq空间特别关心我的人怎么看邮政网关中国邮政支付网关是不是不能在线开通支付宝充值了?
成都主机租用 linuxapache虚拟主机 申请免费域名 securitycenter 鲨鱼机 地址大全 500m空间 dux 网络空间租赁 空间技术网 搜索引擎提交入口 drupal安装 网通服务器 韩国代理ip 中国域名 主机返佣 godaddy空间 服务器硬件配置 石家庄服务器 中美互联网论坛 更多