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}
搬瓦工最近上线了一个新的荷兰机房,荷兰 EUNL_9 机房,这个 9 的编号感觉也挺随性的,之前的荷兰机房编号是 EUNL_3。这次荷兰新机房 EUNL_9 采用联通 AS9929 高端路线,三网都接入了 AS9929,对于联通用户来说是个好消息,又多了一个选择。对于其他用户可能还是 CN2 GIA 机房更合适一些。其实对于联通用户,这个荷兰机房也是比较远的,相比之下日本软银 JPOS_1 机房可...
mansora怎么样?mansora是一家国人商家,主要提供沪韩IEPL、沪日IEPL、深港IEPL等专线VPS。现在新推出了英国CN2 KVM VPS,线路为AS4809 AS9929,可解锁 Netflix,并有永久8折优惠。英国CN2 VPS,$18.2/月/1GB内存/10GB SSD空间/1TB流量/100Mbps端口/KVM,有需要的可以关注一下。点击进入:mansora官方网站地址m...
萨主机(lisahost)新上了美国cn2 gia国际精品网络 – 精品线路,支持解锁美区Netflix所有资源,HULU, DISNEY, StartZ, HBO MAX,ESPN, Amazon Prime Video等,同时支持Tiktok。套餐原价基础上加价20元可更换23段美国原生ip。支持Tiktok。成功下单后,在线充值相应差价,提交工单更换美国原生IP。!!!注意是加价20换原生I...
mergesort为你推荐
时间刻度移动星图怎么对时间刻度?4k超高清视频下载哪里有4K片源下载啊?补充:刚入手了一个4k电视盒,小美盒子V9,说是支持4k。正好我的电视机是4k的,想知道哪里有得下载呢?有朋友说我傻,现在基本上没有4k片源下载,而且不知道什么时候才有。等到流行的时候也许这个机器又淘汰啦!我该怎么办啊?comexceptionapro exception是什么意思医院排队系统医院排队叫号系统有哪些功能?ocr软件下载如何安装汉王ocr文字识别软件怎么查微信注册时间怎么知道微信上次登录时间btest进入北大青鸟需要什么学历呢西安娱乐西安那里有好玩的地方,夜生活不去如何查看qq特别关心我的人qq空间特别关心我的人怎么看在线操作系统常见的电脑操作系统有哪些?各有什么优缺点
免费vps服务器 linuxvps linuxapache虚拟主机 西安服务器 google镜像 国外免费全能空间 bgp双线 jsp空间 最好的qq空间 idc查询 360云服务 www789 下载速度测试 vul 万网空间 杭州电信宽带 rewritecond japanese50m咸熟 nano 香港云主机 更多