两者基本上差不多,重新学一遍,也算是复习了
void mergesort(int a[], int b[], int low, int high) {
if (low >= high) return;
int mid = low + (high - low) / 2;
mergesort(a, b, low, mid);
mergesort(a, b, mid + 1, high);
int i = low, j = mid + 1, k = low;
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 i = low; i <= high; i++) a[i] = b[i];
}
根据结构体的val进行排序
```cpp
struct da {
int start, to, val;
}q[10000];
void merge(struct da q[], struct da temp[], int low, int high) {
if (low >= high) return;
int mid = low + (high - low) / 2;
merge(q, temp, low, mid);
merge(q, temp, mid + 1, high);
int i = low, j = mid + 1, k = low;
while (i <= mid && j <= high) {
if (q[i].val < q[j].val)temp[k++] = q[i++];
else temp[k++] = q[j++];
}
while (i <= mid)temp[k++] = q[i++];
while (j <= high)temp[k++] = q[j++];
for (int i = low; i <= high; i++) q[i] = temp[i];
}
如有错误,请大佬指点,谢谢大佬!
```cpp
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//整数归并排序
void mergesort(int a[], int b[], int low, int high) {
if (low >= high) return;
int mid = low + (high - low) / 2;
mergesort(a, b, low, mid);
mergesort(a, b, mid + 1, high);
int i = low, j = mid + 1, 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 i = low; i <= high; i++) a[i] = b[i];
}
//结构体归并排序
struct da {
int start, to, val;
}q[10000];
void merge(struct da q[], struct da temp[], int low, int high) {
if (low >= high) return;
int mid = low + (high - low) / 2;
merge(q, temp, low, mid);
merge(q, temp, mid + 1, high);
int i = low, j = mid + 1, k = low;
while (i <= mid && j <= high) {
if (q[i].val < q[j].val)temp[k++] = q[i++];
else temp[k++] = q[j++];
}
while (i <= mid)temp[k++] = q[i++];
while (j <= high)temp[k++] = q[j++];
for (int i = low; i <= high; i++) q[i] = temp[i];
}