黑马程序员技术交流社区

标题: 一道面试题 [打印本页]

作者: 韩侠    时间: 2015-7-26 12:00
标题: 一道面试题
2: 随机给出一个数组,要求你把越靠近50的数往左排;
(给大家提示一下思路:随机的一个数组?那么数组中的每个元素肯定都有大有小。
这个数组的每个元素都小于50怎么办?
都大于50呢?
介于中间呢?)
思路:
  1:如果数组的每个元素都比50大?
  2:如果数组的每个元素都比50小?
  3:如果数组里面有的元素比50大?有的元素比50小呢?

作者: 胡能军    时间: 2015-7-26 12:01
public static void main(String[] args) {
  int[] arr = { 1, 2, 4, 7, 9, 12, 2, 3, 4, 89, 100, 105, 88, 50, 49, 48,
    48, 47, 99, 60, 40, 30, 70 };
  // int[] arr= {1,4,5,7,8,22,44};
  arr = sort50(arr);
  System.out.println(Arrays.toString(arr));
}
public static int[] sort50(int[] arr) {
  // 从小到大排
  Arrays.sort(arr);
  /*
   * 如果数组里面所有的数都大于50
   */
  if (arr[1] >= 50) {
   return arr;
   /*
    * 如果数组里面所有的数都小于50
    */
  } else if (arr[arr.length - 1] <= 50) {
   int[] arrtemp = new int[arr.length];
   for (int i = 0; i < arr.length; i++) {
    arrtemp[arr.length - 1 - i] = arr[i];
   }
   return arrtemp;
   /*
    * 如果数组里面有大于50的也有小于50的
    */
  } else {
   // 外循环控制次数
   for (int x = 0; x < arr.length - 1; x++) {
    // 内循环控制每一次的比较过程
    /*
     * 第一次,所有元素都参与比较,也就是0个元素不参与。 第二次,有1个元素不用参与。 第三次,有2个元素不用参与。 ...
     */
    // -1是为了防止索引越界
    // -x是为了减少比较的次数
    for (int y = 0; y < arr.length - 1 - x; y++) {
     if (Math.abs(arr[y] - 50) > Math.abs(arr[y + 1] - 50)) {
      // 数据交换
      int temp = arr[y];
      arr[y] = arr[y + 1];
      arr[y + 1] = temp;
     }
    }
   }
   /*// 选择排序法
   for (int i = 0; i < arr.length - 1; i++) {
    for (int j = i + 1; j < arr.length; j++) {
     if (Math.abs(arr[i] - 50) > Math.abs(arr[j] - 50)) {
      int temp = arr[j];
      arr[j] = arr[i];
      arr[i] = temp;
     }
    }
   }*/
  }
  return arr;
}

作者: 韩侠    时间: 2015-7-26 12:07
胡能军 发表于 2015-7-26 12:01
public static void main(String[] args) {
  int[] arr = { 1, 2, 4, 7, 9, 12, 2, 3, 4, 89, 100, 105, 8 ...

写的太给力了,




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