归并排序(Merge)

有序序列两两合并

稳定

空间复杂度O(n),时间复杂度O(nlogn)

int* B = (int*)malloc(sizeof(int) * n);

void sort(int num[], int low, int high) {

if (low < high) {

int mid = (low + high) / 2;

sort(num, low, mid);

sort(num, mid+1, high);

Merge(num, low, mid, high);

}

}

void Merge(int num[],int low,int mid,int high) {

int i, j, k;

for (k = low; low <= high; k++) {//复制

B[k] = num[k];

}

//i,j,k分别指向三个数组的元素

for (i = low, j = mid + 1,k=low; i < mid && j < high; k++) {

if (B[i] > B[j]) num[k] = B[j++];//

else num[k] = B[i++];//

}

while (i <= mid) num[k++] = B[i++];

while(j<=high) num[k++] = B[j++]

}

全部评论

相关推荐

09-02 11:14
已编辑
四川大学 Java
吴offer选手:这种面试是最烦的,学不到东西,然后还被挂的莫名其妙。之前看到一种说法是面试官如果不想要你了,就会问一些很简单的问题,防止你举报他
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务