#include <algorithm>
#include <iostream>
using namespace std;
#include <stdio.h>
#define MAXN 10000
typedef struct Data {
int a, b;
bool operator < (struct Data& rhs) const {
//return a != rhs.a ? a < rhs.a : b > rhs.b;
if (a != rhs.a) {
return a < rhs.a;
}
else {
return b > rhs.b;
}
}
bool compare(struct Data& rhs) const {
if (a != rhs.a) {
return a < rhs.a;
}
else {
return b > rhs.b;
}
}
};
Data tmp[MAXN];
void merge(Data arr[], int start, int mid, int end) {
int p1 = start;
int p2 = mid;
int k = start;
while (p1 < mid && p2 < end) {
//if (arr[p1] < arr[p2]) tmp[k++] = arr[p1++];
if (arr[p1].compare(arr[p2])) tmp[k++] = arr[p1++];
else tmp[k++] = arr[p2++];
}
while (p1 < mid) tmp[k++] = arr[p1++];
while (p2 < end) tmp[k++] = arr[p2++];
for (int i = start; i < end; i++) {
arr[i] = tmp[i];
}
}
void merge_sort(Data arr, int start, int end) {
int mid = (start + end) / 2;
if (start < mid) {
merge_sort(arr, start, mid);
merge_sort(arr, mid, end);
merge(arr, start, mid, end);
}
}
int main() {
Data arr[MAXN];
int i = 0;
arr[i++] = { 2, 6 };
arr[i++] = { 1, 6 };
arr[i++] = { 6, 3 };
arr[i++] = { 10, 4 };
arr[i++] = { 7, 6 };
merge_sort(arr, 0, i);
printf(";");
}
댓글