锁定老帖子 主题:一道java笔试题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-03
我面试过1家公司也问过这个...不会是同一家吧..汗 附上我的
public class SortUtil { /** * 问题;写一个java程序,实现对一个二维数组按指定的列集进行排序?要求实现类似sql中order by的功能,移动时,整行移动,不能打乱整行顺序。 * 可将二维数组想象成数据库里的一个表记录集,然后按指定的列集进行排序,即order by col1,col2。 * a为二维数组,sortCols是要按哪几列排序,如0,2,以逗号分隔,升序排。 * * @param a * 为二维数组 * @param sortCols * 是要按哪几列排序,如0,2,以逗号分隔,升序排。 */ public void sortIntArrs(int[][] a, String sortCols) { // 将所给参数转化成元素为列的数组 int[] columnArray = createColumnArray(sortCols); // 将所给数组按照参数中每一列进行升序排序 for (int i = 0; i < columnArray.length; i++) { orderByColumn(a, columnArray[i]); } } /** * 将所给数组按某列元素升序排序 * * @param a * 将要排序的数组 * @param column * 排序参照的列 */ public static void orderByColumn(int[][] a, int column) { // 冒泡排序 for (int i = 0; i < a.length; i++) { if (a[i].length <= column) throw new IllegalArgumentException( "the given array not has colmun " + column); for (int j = 0; j < a[i].length - i - 1; j++) { if (a[j][column] > a[j + 1][column]) { int[] tempRow = a[j]; a[j] = a[j + 1]; a[j + 1] = tempRow; } } } } /** * 得到所要排序的列数组 * * @param sortCols * @return int[] 元素为要排序列的数组 */ public static int[] createColumnArray(String sortCols) { try { String[] cols = sortCols.split(","); int[] columnArray = new int[cols.length]; for (int i = 0; i < cols.length; i++) { columnArray[i] = Integer.parseInt(cols[i]); } return columnArray; } catch (NumberFormatException e) { throw new IllegalArgumentException( "the argument [" + sortCols + "] is illegal ,because it must be split by ',' and each element is integer "); } } } |
|
返回顶楼 | |
发表时间:2007-06-04
daoger 写道 抛出异常的爱 写道 public void 冒泡();
public void 递归(); public void 交换(); { 12, 34, 98, 4, 56, 78, 12, 546 }, //这行多了。。。故意的么? 恩!说是二维数组,但是每一行不一定就是列数一样啊! 本来我也跟你用的差不多的方法,但是。。。。 |
|
返回顶楼 | |
发表时间:2007-06-06
抛出异常的爱 写道 daoger 写道 抛出异常的爱 写道 public void 冒泡();
public void 递归(); public void 交换(); { 12, 34, 98, 4, 56, 78, 12, 546 }, //这行多了。。。故意的么? 恩!说是二维数组,但是每一行不一定就是列数一样啊! 本来我也跟你用的差不多的方法,但是。。。。 但是什么啊? |
|
返回顶楼 | |
发表时间:2007-06-06
Norther 写道 我面试过1家公司也问过这个...不会是同一家吧..汗 附上我的
呵呵!还真是同一家公司! |
|
返回顶楼 | |
发表时间:2007-06-06
但测试过没有?
光看代码你的方式与我想的方式差别好大 没看明白。 |
|
返回顶楼 | |
发表时间:2007-06-11
有这么复杂吗?
我写的.好像也可以实现 import java.util.Arrays; import java.util.Comparator; public class ArraySort { public static void sort(int[][] ob, final int[] order) { Arrays.sort(ob, new Comparator() { public int compare(Object o1, Object o2) { int[] one = (int[]) o1; int[] two = (int[]) o2; for (int i = 0; i < order.length; i++) { int k = order[i]; if (one[k] > two[k]) { return 1; } else if (one[k] < two[k]) { return -1; } else { continue; } } return 0; } }); } 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 } }; sort(array, new int[] { 0,2,3 }); for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.print(array[i][j]); System.out.print("\t"); } System.out.println(); } } } 结果: 引用 12 34 68 32 9 12 545 12 34 68 32 21 945 23 12 34 68 343 878 235 768 12 34 98 56 78 12 546 12 83 189 26 27 98 33 26 78 2365 78 34 256 873 34 72 82 57 56 0 213 47 23 889 24 899 23 657 91 10 3 2354 73 34 18 |
|
返回顶楼 | |
发表时间:2007-06-11
12, 34, 98, 4, 56, 78, 12, 546 12, 34, 98, 56, 78, 12, 546 仔细的看一下这两行。。。。 第一次写法与你的差不多的。。。 |
|
返回顶楼 | |
发表时间:2007-06-11
抛出异常的爱 写道 12, 34, 98, 4, 56, 78, 12, 546 12, 34, 98, 56, 78, 12, 546 仔细的看一下这两行。。。。 第一次写法与你的差不多的。。。 |
|
返回顶楼 | |
发表时间:2007-06-11
huxp 写道 抛出异常的爱 写道 12, 34, 98, 4, 56, 78, 12, 546 12, 34, 98, 56, 78, 12, 546 仔细的看一下这两行。。。。 第一次写法与你的差不多的。。。 |
|
返回顶楼 | |
发表时间:2007-06-11
抛出异常的爱 写道 huxp 写道 抛出异常的爱 写道 12, 34, 98, 4, 56, 78, 12, 546 12, 34, 98, 56, 78, 12, 546 仔细的看一下这两行。。。。 第一次写法与你的差不多的。。。 而且题目说是类似于数据库里的表.所以列数应该是一样的. PS: 顺便改了一下代码的一个错误. 现在应该没问题了 |
|
返回顶楼 | |