奥运金牌旁行榜
我的算法
比较低效率的一种方法
二维数组{{1,2,3},{2,3,1}}
三次外层循环从最后一位开始循环排序,排序内部(如果后面比前面大,才交换)
static void test(int [][] data){
int[] sign = new int[data.length];
for (int j = 2;j>=0;j--){
for (int i = 0; i < data.length; i++) {
sign[i] = data[i][j];
}
BubbleSort(sign,data);
}
for (int i = 0; i < data.length; i++) {
System.out.println(Arrays.toString(data[i]));
}
}
public static void BubbleSort(int[] arr,int [][] data) {
int temp;//定义一个临时变量
int[] temp1 = new int[data.length];
for(int i=0;i<arr.length-1;i++){//冒泡趟数
for(int j=0;j<arr.length-i-1;j++){
if(arr[j+1]>arr[j]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
temp1 = data[j];
data[j] = data[j+1];
data[j+1] = temp1;
}
}
}
}
比较简单的做法
只需要两层循环就可以实现该功能
通过if else if实现判断 如果内层循环走完 flag发生了改变 就交换数组
static void miaoA(int [][] data){
for (int i = 0; i < data.length; i++) {
int flag = i;
for (int j = i + 1;j< data.length;j++){
if (data[flag][0]<data[j][0]){
flag = j;
}else if (data[flag][0] == data[j][0] && data[flag][1] < data[j][1]){
flag = j;
}else if (data[flag][0] == data[j][0] && data[flag][1] == data[j][1] && data[flag][2] < data[j][2]){
flag = j;
}
}
if (flag != i){
}
}
}
Arrays.sort自定义排序规则
利用Arrays.sort自定义排序规则(类似于上一个方法)
Arrays.sort(data,(o1,o2) -> {
if(o1[0]!=o2[0]){
return o2[0]-o1[0];
}else if(o1[1]!=o2[1]){
return o2[1]-o1[1];
}else{
return o2[2]-o1[2];
}
});