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}
前几天看到网友反馈到PacificRack商家关于处理问题的工单速度慢,于是也有后台提交个工单问问,没有得到答复导致工单自动停止,不清楚商家最近在调整什么。而且看到有网友反馈到,PacificRack 商家的之前年付低价套餐全部下架,而且如果到期续费的话账单中的产品价格会涨价不少。所以,如果我们有需要续费产品的话,谨慎选择。1、特价产品下架我们看到他们的所有原来发布的特价方案均已下架。如果我们已有...
菠萝云国人商家,今天分享一下菠萝云的广州移动机房的套餐,广州移动机房分为NAT套餐和VDS套餐,NAT就是只给端口,共享IP,VDS有自己的独立IP,可做站,商家给的带宽起步为200M,最高给到800M,目前有一个8折的优惠,另外VDS有一个下单立减100元的活动,有需要的朋友可以看看。菠萝云优惠套餐:广州移动NAT套餐,开放100个TCP+UDP固定端口,共享IP,8折优惠码:gzydnat-8...
优林怎么样?优林好不好?优林 是一家国人VPS主机商,成立于2016年,主营国内外服务器产品。云服务器基于hyper-v和kvm虚拟架构,国内速度还不错。今天优林给我们带来促销的是国内东北地区哈尔滨云服务器!全部是独享带宽!首月5折 续费5折续费!地区CPU内存硬盘带宽价格购买哈尔滨电信2核2G50G1M53元直达链接哈尔滨电信4核4G50G1M83元直达链接哈尔滨电信8核8G50G1M131元直...
mergesort为你推荐
mergefield邮件合并日期,想让电子表格中的日期格式与WORD中的日期格式一致公众号付费阅读目前公众号有没有的付费问答平台可以提供的?在线直播系统网络视频直播系统的简介shoujiao手机板aoblox怎么从英文变成中文shoujiao手机电池突然充不上电,是怎么回事?该怎么办?selectintoACCESS中提示“不允许在select into语句中使用多值字段”gas是什么意思petrol和gas的区别za是哪个国家的奥洛菲是哪个国家的erp系统教程在一个公司里怎样去学ERPerp系统教程ERP系统怎样操作,有教学视频吗?
GGC linkcloud 美国主机论坛 68.168.16.150 linux空间 电子邮件服务器 网站cdn加速 789电视 国外代理服务器软件 南通服务器 in域名 中国电信网络测速 photobucket cdn网站加速 空间服务器 卡巴斯基官网下载 架设代理服务器 globalsign server2008 comodo 更多