课堂代码实验
问题:
(对二维数组排序)编写一个方法,使用下面方法对二维数组排序:
public static void sort(int m[ ][ ])
这个方法实现先按行排列后在按列排序。
例如:
初始数组{{4,2},{1,7},{4,5},{1,2},{1,1},{4,1}}。
排序后为{{1,1},{1,2},{1,7},{4,1},{4,2},{4,5}}。
基本思路:
先排行,后排列。排序的思路相同。将一维数组理解成二维数组。做的时候顺便画图理解更好。
代码如下:
package java_class;
import java.util.Scanner;
public class Sort_my_Array {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
System.out.println("请输入二维数组的横坐标和纵坐标:");
int [][] my_array = new int[scn.nextInt()][scn.nextInt()];
System.out.println("请输入你的数组:");
for(int i = 0;i < my_array.length;i++ ){
for(int j = 0;j < my_array[i].length;j++){
my_array[i][j] = scn.nextInt();
}
}
System.out.println("排序前数组如下:");
print_array(my_array);
cmp(my_array); //将数组的第一位先排下序
sort(my_array);
System.out.println("排序后数组如下:");
print_array(my_array);
}
public static void cmp(int m[][]){
for(int i = 0;i < m.length;i++){
for (int j = i+1;j < m.length;j++) {
if (m[i][0] > m[j][0]) {
int[] temp = m[j];
m[j] = m[i];
m[i] = temp;
}
}
}
}
public static void sort(int[][] m){
for (int i =0;i < m.length;i++){
int k =1;
for (int j = i+1;j < m.length;j++){
if(m[j][0] > m[i][0])
break;
if (m[i][k] == m[j][k]){
do {
k++;
}while(m[i][k] != m[j][k]);
if (m[i][k] > m[j][k]){
int[] temp = m[j];
m[j] = m[i];
m[i] = temp;
}
}
if (m[i][k] > m[j][k]){
int[] coc = m[j];
m[j] = m[i];
m[i] = coc;
}
}
}
}
public static void print_array(int m[][]){
for(int i = 0;i < m.length;i++ ){
for(int j = 0;j < m[i].length;j++){
System.out.print(m[i][j] + " ");
}
System.out.println();
}
}
}
运行结果实例: