归并排序(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++]

}

全部评论

相关推荐

专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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