【发布时间】:2020-07-08 09:20:32
【问题描述】:
在屏幕上显示矩阵列的列表,按各列中最大值的降序排列;数据排序将通过归并排序完成。 我在向量中写入最大元素,然后对向量进行排序,并且已经从向量中您必须显示列。如果矩阵中有 2 个相同的数字,它必须显示正确的列,它必须使用坐标,但我失败了。
2 6 1
10 5 11
4 8 9
最终结果
1 2 6
11 10 5
9 4 8
static void maxVec(int[][] myArray, int n, int m) {
int[] elMax=new int[m];
for (int i=0; i<m; i++) {
int max=0;
if(n>m) {
int count=(n-m);
for (int j=0; j<myArray[i].length+count; j++) {
if(myArray[j][i]>max) {
max=myArray[j][i];
}
}
}
if(n==m) {
for (int j=0; j<myArray[i].length; j++) {
if(myArray[j][i]>max) {
max=myArray[j][i];
}
}
}
if(n<m) {
int count=(m-n);
for (int j=0; j<m-count; j++) {
if(myArray[j][i]>max) {
max=myArray[j][i];
}
}
}
elMax[i]=max;
}
mergeSort(elMax, elMax.length);
for(int i=0;i<elMax.length;i++) {
System.out.print(elMax[i]+" ");
}
System.out.println("\n===================================");
//here i don't know what to do
for(int k=0;k<elMax.length;k++) {
for (int i=0; i<myArray.length; i++) {
for (int j=0; j<myArray[i].length; j++) {
if(elMax[k]==myArray[i][j]) {
for (int w=0; w<myArray[w].length; w++) {
System.out.print(myArray[i][w]+" ");
}
System.out.println();
}
}
}
}
}
//merge sort
public static void merge(
int[] a, int[] l, int[] r, int left, int right) {
int i=0, j=0, k=0;
while(i<left && j<right) {
if(l[i]>=r[j]) {
a[k++]=l[i++];
}
else {
a[k++]=r[j++];
}
}
while(i<left) {
a[k++]=l[i++];
}
while(j<right) {
a[k++]=r[j++];
}
}
public static void mergeSort(int[] a, int n) {
if(n<2) {
return;
}
int mid =n/2;
int[] l = new int[mid];
int[] r = new int[n-mid];
for(int i=0;i<mid;i++) {
l[i]=a[i];
}
for(int i=mid;i<n;i++) {
r[i-mid]=a[i];
}
mergeSort(l, mid);
mergeSort(r, n-mid);
merge(a, l, r, mid, n-mid);
}
【问题讨论】:
-
基本问题是您正在对最大值数组进行排序,而不是对要排序的内容进行排序,即矩阵。重写您的 mergeSort 例程,以便对矩阵进行排序,这是最直接的处理方式。