62,614
社区成员
发帖
与我相关
我的任务
分享
//= =
public static void main(String[] args) {
int array[][] = new int[][]{
{12, 34, 68, 32, 9, 12, 545},
{34, 72, 82, 57, 56, 0, 213},
{12, 34, 68, 32, 21, 945, 23},
{91, 10, 3, 2354, 73, 34, 18},
{12, 83, 189, 26, 27, 98, 33},
{47, 23, 889, 24, 899, 23, 657},
{12, 34, 68, 343, 878, 235, 768},
{12, 34, 98, 56, 78, 12, 546},
{26, 78, 2365, 78, 34, 256, 873}
};
sortIntArrays(array, 6, true);
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
System.out.print(array[i][j] + "\t");
}
System.out.println();
}
}
public static void sortIntArrays(int[][] array, final int sortCols, final boolean sortord) {
java.util.Arrays.sort(array,new java.util.Comparator() {
@Override
public int compare(Object o1, Object o2) {
//长度没sortCols长的排前面
if(o1==null&&o2==null)
return 0;
if(o1==null&&o2!=null)
return sortord?1:-1;
if(o1!=null&&o2==null)
return sortord?-1:1;
int[]st1=(int[]) o1;
int[]st2=(int[]) o2;
if(st1.length<sortCols&&st2.length<sortCols)
return 0;
if(st1.length<sortCols&&st2.length>=sortCols)
return sortord?1:-1;
if(st1.length>=sortCols&&st2.length<sortCols)
return sortord?-1:1;
//如果二个长度都足够
return sortord?st1[sortCols]-st2[sortCols]:st2[sortCols]-st1[sortCols];
}
});
}
package javaoop;
import java.util.Arrays;
public class TestPaiXun2Wei {
public static void main(String[] args) {
int array[][] = new int[][] { { 12, 34, 68, 32, 9, 12, 545 },
{ 34, 72, 82, 57, 56, 0, 213 },
{ 12, 34, 68, 32, 21, 945, 23 },
{ 91, 10, 3, 2354, 73, 34, 18 },
{ 12, 83, 189, 26, 27, 98, 33 },
{ 47, 23, 889, 24, 899, 23, 657 },
{ 12, 34, 68, 343, 878, 235, 768 },
{ 12, 34, 98, 56, 78, 12, 546 },
{ 26, 78, 2365, 78, 34, 256, 873 }
};
PaiXun2Wei a =new PaiXun2Wei();
a.sortIntArrays(array, "0", true);
}
}
class PaiXun2Wei {
// 主方法
public void sortIntArrays(int[][] a, String sortCols, boolean sortord) {
if (sortord == true) {// 升序
this.up(a, sortCols);
} else if (sortord == false) {// 降序
this.down(a, sortCols);
}
}
// 上升排序(由小到大)
public void up(int[][] a, String sortCols) {
int[][]aa={};//用来存放排序后的a[][]
int[] b = {};// 存放需要排序列的数组
int[] c ={};// 存放b[]升序后的数组
int[] z = {};// 存放排序后数组元素原来所在数组的下标
for (int i = 0; i < 9; i++) {//提取需要排序的一列存到b[]
b[i] = a[i][Integer.parseInt(sortCols)];
}
for(int i=0;i<b.length;i++){//复制b[]
c[i]=b[i];
}
Arrays.sort(c);// 升序排列 为了得到排序后元素 排序前的下标z[]
for (int i = 0;i<c.length; i++) {
for (int j = 0;j<c.length; j++) {
if (c[i] == b[j]) {
z[i] = j;
b[j] =-999999;
break;
} else {
continue;
}
}
}
for(int i=0;i<a.length;i++){//建立aa[][]存放排序后的a[][] 并打印
for(int j=0;j<a[0].length;j++){
aa[i][j]=a[z[i]][j];//利用z[]下标数组排序
System.out.print(aa[i][j]+"\t");
}
System.out.println();
}
}
// 下降排序(由大到小)
public void down(int[][] a, String sortCols) {
int[][]aa={};
int[] z = {};// 存放排序后数组元素原来所在数组的下标
int[] b = {};// 存放需要排序列的数组
int[] d ={};// 存放b[]升序后的数组
int[] c ={};// 存放b[]降序后的数组
for (int i = 0; i < 9; i++) {
b[i] = a[i][Integer.parseInt(sortCols)];
}
for(int i=0;i<b.length;i++){
d[i]=b[i];
}
Arrays.sort(d);// 升序排列
for (int i = 0,j = c.length - 1; i < c.length; i++,j--) {// 升序变降序
c[i]=d[j];
}
for (int i = 0;i<c.length; i++) {
for (int j = 0;j<c.length; j++) {
if (c[i] == b[j]) {
z[i] = j;
b[j] =-999999;
break;
} else {
continue;
}
}
}
for(int i=0;i<a.length;i++){
for(int j=0;j<a[0].length;j++){
aa[i][j]=a[z[i]][j];
System.out.print(aa[i][j]+"\t");
}
System.out.println();
}
}
}