作业介绍
int a[100005];
int t[100005];
// 归并排序
void merge(int l, int r){
if(l == r) return ;
// 分解
int mid = (l+r)/2;
merge(l, mid);
merge(mid+1, r);
// 合并 & 求解
int i = l, j = mid+1, k = l;
// 把左右两个区间的元素,分别有序的取出来,放到临时数组中
while(i<=mid && j<=r){
// 如果前面的元素较小,就放到临时数组中
if(a[i]<=a[j]) t[k++] = a[i++];
else t[k++] = a[j++];
}
// 判断左右区间的元素有没有剩余
while(i<=mid) t[k++] = a[i++];
while(j<=r) t[k++] = a[j++];
// 把临时数组中排好序的元素,再放回到a数组中
for(int i=l;i<=r;i++) a[i] = t[i];
}
- 状态
- 已结束
- 题目
- 4
- 开始时间
- 2024-3-23 15:30
- 截止时间
- 2024-4-1 23:59
- 可延期
- 24 小时