黑马程序员技术交流社区

标题: 一个简单的排序题目(面试题) [打印本页]

作者: yuhongzhen    时间: 2015-11-27 21:03
标题: 一个简单的排序题目(面试题)
这是一个黑马面试题,当时紧张没做出来,哎,现在做出来了,请大家指教。

/*编写一个类,其中包含两个排序的方法sort(), 参数不同,当键盘录入的是一串整数,就按照从小到大 的顺序输出,如果键盘录入的是一个字符串,就将字符串反序输出。*/


public static void main(String[] args) {
                // TODO Auto-generated method stub
                //接受键盘输入
                Scanner scanner = new Scanner(System.in);
                //判断输入的内容
                if (scanner.hasNextInt()) {
                        int a=scanner.nextInt();//输入的是整数,则调用sort方法,从小到大排列
                        sort(a);
                } else {
                        String str=scanner.next();//输入的字符串,则调用sort方法,反序输出
                        sort(str);
                }
        }
        //整数排序
        public static void sort(int num){
                //将整数转化为char数组
                char[] ch=Integer.toString(num).toCharArray();
                //定义一个整数数组
                int [] chInt=new int[ch.length];
                //遍历char数组,并转换元素为整数,存入整数数组
                for(int a=0;a<ch.length;a++){
                        String s=String.valueOf(ch[a]);//char转String
                        chInt[a]=Integer.parseInt(s);//String转int,存入整数数组
                }
                //遍历整数数组,进行排序
                for(int i=0;i<chInt.length-1;i++){
                        for(int j=i+1;j<chInt.length;j++){
                                if(chInt[j]<=chInt[i]){
                                        int temp=chInt[i];
                                        chInt[i]=chInt[j];
                                        chInt[j]=temp;
                                }
                        }
                }
                //输出结果
                for(int b:chInt){
                        System.out.print(b+",");
                }
        }
        //字符串反序输出
        public static void sort(String str){
                //转换字符串为char数组
                char[] chr=str.toCharArray();
                //定义起始下标和结束下标
                int stat=0;
                int end=chr.length-1;
                //遍历数组,反序排列
                for(int i=0;i<chr.length;i++){
                        if(stat<end){
                                char temp=chr[stat];
                                chr[stat]=chr[end];
                                chr[end]=temp;
                                stat++;
                                end--;
                        }
                }
                //输出结果
                System.out.println(new String(chr));

        }


作者: olivor    时间: 2015-11-27 22:58
面试编程题时间限制在多长呢
作者: Weidan    时间: 2015-11-27 23:59
对你这道题感兴趣然后写了:
  1. package Test03;

  2. import java.util.Arrays;
  3. import java.util.Scanner;

  4. /**
  5. * 编写一个类,其中包含两个排序的方法sort(), 参数不同,当键盘录入的是一串整数,就按照从小到大
  6. * 的顺序输出,如果键盘录入的是一个字符串,就将字符串反序输出。
  7. *
  8. * @author Weidan
  9. *
  10. */
  11. public class Demo {
  12.         public static void main(String[] args) {
  13.                 //接收键盘输入
  14.                 Scanner sc = new Scanner(System.in);
  15.                 String input = sc.next();
  16.                 try {
  17.                         //若字符串可以转换为数字
  18.                         Integer.valueOf(input);
  19.                         //分割字符串成字符数组
  20.                         String[] inputStr = input.split("");
  21.                         //创建新数组
  22.                         int[] array = new int[inputStr.length];
  23.                         //把字符串的每个数字存入数组中
  24.                         for (int i = 0; i < array.length; i++) {
  25.                                 array[i] = Integer.valueOf(inputStr[i]);
  26.                         }
  27.                         //排序
  28.                         sort(array);
  29.                 } catch (NumberFormatException e) {
  30.                         //若不可以转换则直接反转输出
  31.                         System.out.println(sort(input));
  32.                 }
  33.         }

  34.         public static void sort(int[] array) {
  35.                 //冒泡排序
  36.                 for (int j = 0; j < array.length - 1; j++) {
  37.                         for (int i = 0; i < array.length - 1 - j; i++) {
  38.                                 if (array[i] > array[i + 1]) {
  39.                                         int temp = array[i];
  40.                                         array[i] = array[i + 1];
  41.                                         array[i + 1] = temp;
  42.                                 }
  43.                         }
  44.                 }
  45.                 //新增一个字符串
  46.                 String newStr = "";
  47.                 //把数组中的每个数字存入字符串中
  48.                 for (int i : array) {
  49.                         newStr += i;
  50.                 }
  51.                 //输出新字符串
  52.                 System.out.println(newStr);
  53.         }

  54.         public static String sort(String str) {
  55.                 //转换为char数组
  56.                 char[] strArray = str.trim().toCharArray();
  57.                 //创建新数组
  58.                 String reverseStr = "";
  59.                 //反向存储字符串
  60.                 for (int i = strArray.length - 1; i > -1; i--) {
  61.                         reverseStr += strArray[i];
  62.                 }
  63.                 ////返回值
  64.                 return reverseStr;
  65.         }
  66. }
复制代码

作者: yuhongzhen    时间: 2015-11-28 09:40
olivor 发表于 2015-11-27 22:58
面试编程题时间限制在多长呢

一般40分钟,不过有超时的情况,最好别超时
作者: 欧欧拐    时间: 2015-11-28 09:43





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2