论坛首页 入门技术论坛

一道java笔试题

浏览 23436 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-31  
这是某公司的一道java笔试题,题目内容如下:
写一个java程序,实现对一个二维数组按指定的列集进行排序?要求实现类似sql中order by的功能,移动时,整行移动,不能打乱整行顺序。
可将二维数组想象成数据库里的一个表记录集,然后按指定的列集进行排序,即order by col1,col2。
//a为二维数组,sortCols是要按哪几列排序,如0,2,以逗号分隔,升序排。
public void sortIntArrs(int[][] a,String sortCols)
{
}

以下是我回答的程序:

public class MyArray
{
	/**
	 * @param args
	 */
	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, 4, 56, 78, 12, 546 },
		{ 26, 78, 2365, 78, 34, 256, 873 } };// 要排序的数组
		int co[] = new int[]
		{ 0, 1, 2, 3, 4 };// 指定进行排序的列索引及排序顺序
		MyArray arraylist = new MyArray();
		arraylist.sortIntArrs(array, co);
	}

	public void sortIntArrs(int[][] a, int[] co)
	{
		for (int i = 0; i < a.length - 1; i++)
		{
			for (int j = i + 1; j < a.length; j++)
			{
				sort(a, co, i, j, 0);
			}
		}
		for (int m = 0; m < a.length; m++)
		{
			for (int n = 0; n < a[m].length; n++)
			{
				System.out.print(a[m][n] + ",");
			}
			System.out.println();
		}
	}

	public void sort(int[][] a, int[] co, int i, int j, int co_index)
	{
		if (co_index < co.length)
		{
			if (a[i][co[co_index]] > a[j][co[co_index]])
			{
				int aa[] = a[i];
				a[i] = a[j];
				a[j] = aa;
			} else if (a[i][co[co_index]] == a[j][co[co_index]])
			{
				sort(a, co, i, j, co_index + 1);
			}
		} else
			return;
	}
}



我的方法中没有将指定的列用字符串参数传递,我采用的是整型数组!
不过我的程序是不正确的,各位有正确的解决方法吗?请赐教!
   发表时间:2007-05-31  
对于数组你不克隆一次再排么?
0 请登录后投票
   发表时间:2007-05-31  
什么叫克隆?老兄,说的明白一点吧!
0 请登录后投票
   发表时间:2007-05-31  
排序条件这么简单,Schwartzian变换都用不上。
0 请登录后投票
   发表时间:2007-05-31  
Schwartzian变换都用不上

这个变换是个什么咚咚?
0 请登录后投票
   发表时间:2007-05-31  
lix23 写道
Schwartzian变换都用不上

这个变换是个什么咚咚?


见你那本《programming ruby》第457-458页 Enumerable#sort_by 的说明。
ps: 我隐。
0 请登录后投票
   发表时间:2007-06-01  
public void 冒泡();
public void 递归();
public void 交换();

  { 12, 34, 98, 4, 56, 78, 12, 546 }, //这行多了。。。故意的么?
0 请登录后投票
   发表时间:2007-06-01  
抛出异常的爱 写道
public void 冒泡();
public void 递归();
public void 交换();

  { 12, 34, 98, 4, 56, 78, 12, 546 }, //这行多了。。。故意的么?

恩!说是二维数组,但是每一行不一定就是列数一样啊!
0 请登录后投票
   发表时间:2007-06-01  
重作数组的工作量大了。。。
不得以非要用ArrayList了
0 请登录后投票
   发表时间:2007-06-01  
最后的程序。。。。
调程序时间花的好多啊,(手生的厉害。。)
看来面试过不了。。

package com.maodajun.lib;

import java.util.ArrayList;
import java.util.List;


public class MyArray2 {

	private List[] table;
	private List order;
//	public String getOrder() {
//		return order.toArray().toString();
//	}
        /** 拆字符串。。。变成list**/
//	public void setOrder(String order) {
//		//todo
//	}
	public void setOrder(List order){
		this.order = order;
		
	}/**返回。。为了打印方便**/
	public List getTable() {
		List result = new ArrayList();
		for(int i = 0 ; i < table.length ; i ++){
			result.add(table[i]);
		}
		return result;
	}/**数组变list**/
	public void setTable(int[][] array) {		
		List tmp ;
		table = new ArrayList[array.length];
		for(int i = 0 ; i < array.length ; i++){
			tmp = new ArrayList();
			for(int j = 0 ; j < array[i].length ; j ++){
				tmp.add(""+array[i][j]);
			}
			table[i]=tmp;
		}
	}/**交换**/
	public void changeElmane(int i, int j) {
		List tmp = table[i];
		table[i] = table[j];
		table[j] = tmp;
		
	}/**底归**/
	public int tableComp(int orderno, int i, int j) {
		if(
				Integer.parseInt(table[i].get(Integer.parseInt(order.get(orderno).toString())).toString())
				>
				Integer.parseInt(table[j].get(Integer.parseInt(order.get(orderno).toString())).toString())
		   ){
			return -1;			
		}else if(
				Integer.parseInt(table[i].get(Integer.parseInt(order.get(orderno).toString())).toString())
				==
				Integer.parseInt(table[j].get(Integer.parseInt(order.get(orderno).toString())).toString())
				
			){
			return tableComp(orderno+1,i , j );
		}else{
			return 1;
		}		
	}/**冒泡**/
	public void POPcompare() {
		for(int i = 0 ; i < table.length ; i++){
			for(int j = i +1 ; j < table.length; j ++ ){
				if(tableComp(0,i,j)<0){
					changeElmane(i,j);
				}
			}
		}
		
	}
	

}


测试代码:
package com.maodajun.test;

import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;
import org.apache.commons.collections.CollectionUtils;

public class MyArray2Test extends TestCase {
	public MyArray2 myArray2;
	public static void main(String[] args) {
		junit.textui.TestRunner.run(MyArray2Test.class);
	}

	protected void setUp() throws Exception {
		super.setUp();
		myArray2 = new MyArray2();
		
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}

	/*
	 * Test method for 'com.maodajun.lib.MyArray2.setTable(int[][])'
	 */
	public void testSetTable() {
		int[][] array= {
				{0,1},
				{2,3,4},
		};
		myArray2.setTable(array);
		assertEquals(myArray2.getTable().size(),2);
		assertEquals(((List)myArray2.getTable().get(0)).size(),2);
		assertEquals(((List)myArray2.getTable().get(1)).size(),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();
		}
		System.out.println(myArray2.getTable());
	}
	public void testTableChange() {
		int[][] array= {
				{0,1},
				{2,3,4},
		};
		myArray2.setTable(array);
		assertEquals(myArray2.getTable().size(),2);
		myArray2.changeElmane(0,1);
		assertEquals(((List)myArray2.getTable().get(0)).size(),3);
		assertEquals(((List)myArray2.getTable().get(1)).size(),2);
		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();
		}
		System.out.println(myArray2.getTable());
	}
	public void testTableComp() {
		int[][] array= {
				{0,1},
				{2,3,4},
		};

		myArray2.setTable(array);
		assertEquals(myArray2.getTable().size(),2);
		List olist = new ArrayList();
		olist.add(""+0);
		olist.add(""+1);
		myArray2.setOrder(olist);
		assertEquals(1,myArray2.tableComp(0,0,1));

		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();
		}
		System.out.println(myArray2.getTable());
	}
	public void testTableComp2() {
		int[][] array= {
				{2,3,4},
				{0,1},
				
		};

		myArray2.setTable(array);
		assertEquals(myArray2.getTable().size(),2);
		List olist = new ArrayList();
		olist.add(""+0);
		olist.add(""+1);
		myArray2.setOrder(olist);
		assertEquals(-1,myArray2.tableComp(0,0,1));

		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();
		}
		System.out.println(myArray2.getTable());
	}
	public void testTableComp3() {
		int[][] array= {
				{2,3,4},
				{2,1},
				
		};

		myArray2.setTable(array);
		assertEquals(myArray2.getTable().size(),2);
		List olist = new ArrayList();
		olist.add(""+0);
		olist.add(""+1);
		myArray2.setOrder(olist);
		assertEquals(-1,myArray2.tableComp(0,0,1));

		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();
		}
		System.out.println(myArray2.getTable());
	}
	
	public void testPOPcompare() {
		int[][] array= {
				{2,3,4},
				{2,1},
				
		};

		myArray2.setTable(array);
		assertEquals(myArray2.getTable().size(),2);
		List olist = new ArrayList();
		olist.add(""+0);
		olist.add(""+1);
		myArray2.setOrder(olist);
		
		myArray2.POPcompare();
		assertEquals(((List)myArray2.getTable().get(0)).size(),2);
		assertEquals(((List)myArray2.getTable().get(1)).size(),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();
		}
		System.out.println(myArray2.getTable());
	}
	public void testTure() {
        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 } };
        
		List olist = new ArrayList();
		olist.add(""+0);
		olist.add(""+1);
		olist.add(""+2);
		olist.add(""+3);
		olist.add(""+4);
		
		myArray2.setTable(array);
		myArray2.setOrder(olist);
		myArray2.POPcompare();
		
		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();
		}
		for(int i = 0 ; i <myArray2.getTable().size(); i++)
		System.out.println(myArray2.getTable().get(i));
	}	
	
	
		
}

引用
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
[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]
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics