``````#include<iostream>
using namespace std;
void erfen(int A[],int low,int high);
void paixu(int A[],int low,int mid,int high);

int main()
{
int num[2] = {3,4};
erfen(num, 0,1);
for (int i = 0; i < 2; i++)
cout << num[i] << endl;

return 0;
}
void paixu(int A[], int low, int mid, int high)
{
int* B = new int[high - low + 1];
int i = low;
int j = mid + 1;
int k = 0;
while (i <= mid && j <= high)
{
if (A[i] <= A[j])B[k++] = A[i++];
else B[k++] = A[j++];
}
while (i <= mid)B[k++] = A[i++];
while (j <= high) B[k++] = A[j++];
//填充原数组
for (int x = low, k = 0; x <= high; i++)
A[i] = B[k++];
delete [] B;
}
void erfen(int A[], int low, int high)
{

if (low < high)
{
int mid = (low + high) / 2;
erfen(A,low,mid);
erfen(A, mid + 1,high);
paixu(A, low, mid, high);
}
}

``````

1个回答

package algorithm; public class MergeSort { //　private　static　long　sum　=　0; /** * 　*　<pre> * 　*　二路归并 * 　*　原理：将两个有序表合并和一个有序表 * 　*　</pre> * 　* * 　*　@param　a * 　*　@param　s * 　*　第一个有序表的起始下标 * 　*　@param　m * 　*　第二个有序表的起始下标 * 　*　@param　t * 　*　第二个有序表的结束小标 * 　* */ private static void merge(int[] a, int s, int m, int t) { int[] tmp = new int[t - s + 1]; int i = s, j = m, k = 0; while (i < m && j <= t) { if (a[i] <= a[j]) { tmp[k] = a[i]; k++; i++; } else { tmp[k] = a[j]; j++; k++; } } while (i < m) { tmp[k] = a[i]; i++; k++; } while (j <= t) { tmp[k] = a[j]; j++; k++; } System.arraycopy(tmp, 0, a, s, tmp.length); } /** * 　* * 　*　@param　a * 　*　@param　s * 　*　@param　len * 　*　每次归并的有序集合的长度 */ public static void mergeSort(int[] a, int s, int len) { int size = a.length; int mid = size / (len << 1); int c = size & ((len << 1) - 1); //　-------归并到只剩一个有序集合的时候结束算法-------// if (mid == 0) return; //　------进行一趟归并排序-------// for (int i = 0; i < mid; ++i) { s = i * 2 * len; merge(a, s, s + len, (len << 1) + s - 1); } //　-------将剩下的数和倒数一个有序集合归并-------// if (c != 0) merge(a, size - c - 2 * len, size - c, size - 1); //　-------递归执行下一趟归并排序------// mergeSort(a, 0, 2 * len); } public static void main(String[] args) { int[] a = new int[]{4, 3, 6, 1, 2, 5}; mergeSort(a, 0, 1); for (int i = 0; i < a.length; ++i) { System.out.print(a[i] + "　"); } } } 就这个算法，其他还好理解，那个mergesort方法完全看不懂，，不知道c和mid代表什么，也不了解位移运算符和&运算符的用法，有大神能帮我看一下么，谢谢了
C语言或C++实现，排序方法的时间比较？

Java算法设计：迭代器实现排序（求各位大佬各抒己见）

c++的单链表合并，析构出现问题

cnt变量的值为什么会无故变动？

#include "stdafx.h" #include "stdafx.h" #include<stdio.h> #include<stdlib.h> #define MAX_SIZE 100 //树的最大结点数 #define MAX_VEX_NUM 20 //最大顶点数 #define MAX_EDGE_NUM 190 //最大边数 //边集 typedef struct { char begin; char end; int weight; }Edge; //图结构 typedef struct{ Edge edge[MAX_EDGE_NUM]; char vex[MAX_VEX_NUM]; int vexnum,edgenum; }Graph; //树的节点结构 typedef struct Node{ char data; int parent; }Node; //树的双亲表示存储结构 typedef struct{ Node node[MAX_SIZE]; int n; //结点数 }PTree,MFSet; //初始化MFSet集合 void initMFSet(MFSet *S,Graph G){ if(!S) exit(0); for(int i=0;i<G.vexnum;i++){ S->node[i].data=G.vex[i]; S->node[i].parent=-1; } S->n=G.vexnum; } int find_mfset(MFSet S,int i){ if(i<0||i>S.n) exit(0); int j; for(j=i;S.node[j].parent>0;j=S.node[j].parent); return j; } //合并 void merge(MFSet *S,int i,int j){ if(i<0||i>S->n||j<0||j>S->n) exit(0); S->node[j].parent=i; } //创建无向网 void creatGraph(Graph *G){ printf("请输入定点元素个数以及边数:"); scanf("%d,%d",&G->vexnum,&G->edgenum); if(G->edgenum>MAX_EDGE_NUM||G->vexnum>MAX_VEX_NUM){ printf("输入错误，请重新输入："); scanf("%d,%d",&G->vexnum,&G->edgenum); } printf("请输入各个定点信息：\n"); for(int i=0;i<G->vexnum;i++){ fflush(stdin); scanf("%c",&G->vex[i]); } printf("请输入每条边的两个定点和权值:\n"); for(int i=0;i<G->edgenum/2;i++){ fflush(stdin); scanf("%c,%c,%d",&G->edge[i].begin,&G->edge[i].end,&G->edge[i].weight); // G->edge[i].weight = rand()%100; } for(int i=G->edgenum/2;i<G->edgenum;i++){ G->edge[i].begin=G->edge[i-G->edgenum/2].end; G->edge[i].end=G->edge[i-G->edgenum/2].begin; G->edge[i].weight=G->edge[i-G->edgenum/2].weight; } } //找到网中某一结点元素在顶点数组中的位置 int vexLocate(Graph G,char c){ for(int i=0;i<G.vexnum;i++){ if(c==G.vex[i]) return i; } return -1; } void minSpanTree(Graph *G){ int parent[MAX_VEX_NUM]; int m,n,temp; char a,b; for(int i=0;i<G->vexnum;i++){ parent[i]=0; } MFSet S; initMFSet(&S,*G); //使用冒泡排序法将边集的权值按从小到大排序 for(int i=0;i<G->edgenum;i++){ for(int j=0;j<G->edgenum-i-1;j++){ if(G->edge[j].weight>G->edge[j+1].weight){ a=G->edge[j].begin; b=G->edge[j].end; temp=G->edge[j].weight; G->edge[j].begin=G->edge[j+1].begin; G->edge[j].end=G->edge[j+1].end; G->edge[j].weight=G->edge[j+1].weight; G->edge[j+1].begin=a; G->edge[j+1].end=b; G->edge[j+1].weight=temp; } } } for(int i=0;i<G->edgenum;i++){ m=find_mfset(S,vexLocate(*G,G->edge[i].begin)); n=find_mfset(S,vexLocate(*G,G->edge[i].end)); if(m!=n){ //说明没有形成回路 merge(&S,m,n); printf("<%c,%c>,%d\t",G->edge[i].begin,G->edge[i].end,G->edge[i].weight); } } } int _tmain(int argc, _TCHAR* argv[]) { Graph G; creatGraph(&G); minSpanTree(&G); system("pause"); return 0; }

【JSON解析】浅谈JSONObject的使用

python自动下载图片

【前言】 　　收到一封来信，赶上各种事情拖了几日，利用今天要放下工作的时机，做个回复。 　　2020年到了，就以这一封信，作为开年标志吧。 【正文】 　　您好，我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。 　　先说一下我的基本情况，高考失利，不想复读，来到广州一所大专读计算机应用技术专业。学校是偏艺术类的，计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...

Java 14 都快来了，为什么还有这么多人固守Java 8？

【CSDN编者按】1月2日，阿里巴巴发布《达摩院2020十大科技趋势》，十大科技趋势分别是：人工智能从感知智能向认知智能演进；计算存储一体化突破AI算力瓶颈；工业互联网的超融合；机器间大规模协作成为可能；模块化降低芯片设计门槛；规模化生产级区块链应用将走入大众；量子计算进入攻坚期；新材料推动半导体器件革新；保护数据隐私的AI技术将加速落地；云成为IT技术创新的中心 。 新的画卷，正在徐徐展开。...

Python+OpenCV实时图像处理

2020年一线城市程序员工资大调查

python爬取百部电影数据，我分析出了一个残酷的真相
2019年就这么匆匆过去了，就在前几天国家电影局发布了2019年中国电影市场数据，数据显示去年总票房为642.66亿元，同比增长5.4%；国产电影总票房411.75亿元，同比增长8.65%，市场占比 64.07%；城市院线观影人次17.27亿，同比增长0.64%。 看上去似乎是一片大好对不对？不过作为一名严谨求实的数据分析师，我从官方数据中看出了一点端倪：国产票房增幅都已经高达8.65%了，为什...

Windows可谓是大多数人的生产力工具，集娱乐办公于一体，虽然在程序员这个群体中都说苹果是信仰，但是大部分不都是从Windows过来的，而且现在依然有很多的程序员用Windows。 所以，今天我就把我私藏的Windows必装的软件分享给大家，如果有一个你没有用过甚至没有听过，那你就赚了????，这可都是提升你幸福感的高效率生产力工具哦！ 走起！???? NO、1 ScreenToGif 屏幕，摄像头和白板...

【程序人生】程序员接私活常用平台汇总
00. 目录 文章目录00. 目录01. 前言02. 程序员客栈03. 码市04. 猪八戒网05. 开源众包06. 智城外包网07. 实现网08. 猿急送09. 人人开发10. 开发邦11. 电鸭社区12. 快码13. 英选14. Upwork15. Freelancer16. Dribbble17. Remoteok18. Toptal19. AngelList20. Topcoder21. ...