void merge(element arr[], int left, int mid, int right, element tmp[]) {
int i = left; // left part
int j = mid + 1; // right part
int k = left; // tmp index
while (i <= mid && j <= right) {
if (arr[i].row <= arr[j].row || (arr[i].row == arr[j].row && arr[i].col < arr[j].col)) {
tmp[k++] = arr[i++]; // if already, keep going
}
else {
tmp[k++] = arr[j++]; // if not already, back is setted.
}
}
while (i <= mid) tmp[k++] = arr[i++];
while (k <= right) tmp[k++] = arr[j++];
//tmp -> arr 복사
for (i = left; i <= right; i++) { arr[i] = tmp[i]; }
}
void mergeSort(element arr[], int left, int right, element tmp[]) { //ascending order
int mid = (left + right) / 2;
if (left < right) {
mergeSort(arr, left, mid, tmp);
mergeSort(arr, mid + 1, right, tmp);
merge(arr, left, mid, right, tmp);
}
}