wangjiajian • 2年前
首先,只需要定义一个结构体,存下来这一行(在结构体里我用了一个data数组)
#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
int n, m;
struct fucker {
int data[510];
inline bool operator < (const fucker &x) const {
for(int i=1; i<=m; i++) {
if(data[i] == x.data[i])
continue;
return data[i] < x.data[i];
}
return false;
}
} a[510];
int main() {
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++)
scanf("%d", &a[i].data[j]);
}
sort(a+1, a+1+n);
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++)
printf("%d ", a[i].data[j]);
putchar('\n');
}
return 0;
}
评论:
归并版本
#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
int n, m;
struct fucker {
int data[510];
inline bool operator <= (const fucker &x) const {
for(int i=1; i<=m; i++) {
if(data[i] == x.data[i])
continue;
return data[i] < x.data[i];
}
return true;
}
} a[510], b[510];
void guibing(int start,int end) {
if(start >= end)
return;
int mid = (start+end)/2;
guibing(start,mid);
guibing(mid+1,end);
int left_index = start;
int right_index = mid+1;
int t = start;
while(left_index<=mid && right_index<=end) {
if(a[left_index] <= a[right_index]) {
b[t] = a[left_index];
left_index++;
} else {
b[t] = a[right_index];
right_index++;
}
t++;
}
while(left_index <= mid) {
b[t] = a[left_index];
t++;
left_index++;
}
while(right_index <= end) {
b[t] = a[right_index];
t++;
right_index++;
}
for(int i=start; i<=end; i++)
a[i] = b[i];
return;
}
int main() {
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++)
scanf("%d", &a[i].data[j]);
}
guibing(1, n);
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++)
printf("%d ", a[i].data[j]);
putchar('\n');
}
return 0;
}