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 Sub

C语言归并排序代码

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}

HaBangNet(6.95美元/月)美国vps 5TB流量/德国vps 香港双向CN2 GIA VPS

HaBangNet支持支付宝和微信支付,只是价格偏贵,之前国内用户并不多。这次HaBangNet推出三个特价套餐,其中美国机房和德国机房价格也还可以,但是香港机房虽然是双向CN2 GIA线路,但是还是贵的惊人,需要美国和德国机房的可以参考下。HaBangNet是一家成立于2014年的香港IDC商家,中文译名:哈邦网络公司,主营中国香港、新加坡、澳大利亚、荷兰、美国、德国机房的虚拟主机、vps、专用...

阿里云年中活动最后一周 - ECS共享型N4 2G1M年付59元

以前我们在参与到云服务商促销活动的时候周期基本是一周时间,而如今我们会看到无论是云服务商还是电商活动基本上周期都要有超过一个月,所以我们有一些网友习惯在活动结束之前看看商家是不是有最后的促销活动吸引力的,比如有看到阿里云年中活动最后一周,如果我们有需要云服务器的可以看看。在前面的文章中(阿里云新人福利选择共享性N4云服务器年79.86元且送2月数据库),(LAOZUO.ORG)有提到阿里云今年的云...

ParkInHost - 俄罗斯VPS主机 抗投诉 55折,月付2.75欧元起

ParkInHost主机商是首次介绍到的主机商,这个商家是2013年的印度主机商,隶属于印度DiggDigital公司,主营业务有俄罗斯、荷兰、德国等机房的抗投诉虚拟主机、VPS主机和独立服务器。也看到商家的数据中心还有中国香港和美国、法国等,不过香港机房肯定不是直连的。根据曾经对于抗投诉外贸主机的了解,虽然ParkInHost以无视DMCA的抗投诉VPS和抗投诉服务器,但是,我们还是要做好数据备...

mergesort为你推荐
dell服务器维修dell维修服务刷ip流量如何刷自己网站的IP流量netbios协议NetBIOS协议起什么作用?网络安全密钥网络安全密钥一般是什么医院排队系统请问医院采血排队的设备系统是独立的吗?动画分镜头脚本动画分镜头台本的作用?在线沟通网络沟通的问题有哪些短信套餐移动有什么短信包月套餐,怎么开通?acceptchangesaltium designer 6.0如何给元件重新编号flushesno-show rate是什么
备案域名查询 cn域名 香港vps 42u机柜尺寸 60g硬盘 中国特价网 嘟牛 dux asp免费空间申请 秒杀汇 100m独享 四核服务器 四川电信商城 域名与空间 空间登陆首页 日本代理ip 谷歌台湾 国外代理服务器 碳云 ncp 更多