A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

题目是看一个坛友发的,自己屡下思路 把代码写了,供大家参考题目大致要求:随机给一个数组,将数组中越靠近50的数往左放,即从左到右跟50的差值的绝对值越大
  1. /*我的思路
  2. 1、将数组每个元素减 50  arr[i] = arr[i]-50 ;
  3.         则问题可转换为普通的排序问题

  4. 2、将arr[i]的元素按绝对值从小到大排序
  5.     void  swap(int[] arr,int i,int j)
  6.         {
  7.                 if( Math.abs(arr[i]) > Math.abs(arr[j]) )
  8.                 {
  9.                         int temp = arr[i];
  10.                         arr[i] = arr [j];
  11.                         arr[j] = temp;
  12.                 }
  13.         }
  14. 3、将排序后的数组每个元素加上50,arr[i] = arr[i]+50;
  15. 则越靠近50的数就越靠左

  16. */
  17. class  Sort
  18. {
  19.          static void  swap(int[] arr,int i,int j)  //交换数值,绝对值小的在左边
  20.         {
  21.                 if( Math.abs(arr[i]) > Math.abs(arr[j]) )
  22.                 {
  23.                         int temp = arr[i];
  24.                         arr[i] = arr [j];
  25.                         arr[j] = temp;
  26.                 }
  27.         }

  28.         static void printArr(int[] arr)  //定义函数打印数组
  29.         {
  30.                 for(int i = 0; i < arr.length ; i++)
  31.                 {
  32.                          System.out.print(arr[i]+"  ");
  33.                 }
  34.                 System.out.println();
  35.         }

  36.         public static void main(String[] args)
  37.         {
  38.                  int[] arr = { 1, 2, 4, 7, 9, 12, 2, 3, 4, 89, 100, 105, 88, 50, 49, 48,
  39.                                 48, 47, 99, 60, 40, 30, 70 };

  40.                 System.out.println("排序前数组:");

  41.                 printArr(arr); //输出数组

  42.                 for(int i = 0 ; i < arr.length-1 ; i++)
  43.                         arr[i] -= 50 ;                                //每个元素减50

  44.                 for(int i = 0 ; i < arr.length-1 ; i++)
  45.                 {
  46.                         for(int j = i+1 ; j < arr.length; j++)
  47.                         {
  48.                                 swap(arr,i,j);
  49.                         }
  50.                 }

  51.                
  52.                 for(int i = 0; i < arr.length ; i++)
  53.                 {
  54.                          arr[i] = arr[i] + 50;      //将数组值还原
  55.                 }

  56.                 System.out.println("排序后数组:");
  57.                 printArr(arr); //输出数组
  58.                
  59.         }
  60. }
复制代码



排序.png (5.8 KB, 下载次数: 30)

排序的结果

排序的结果

2 个回复

倒序浏览
学习了,看来面试有点难啊
回复 使用道具 举报
本帖最后由 心在左边跳 于 2015-7-9 13:56 编辑

  1. public class Test {

  2.         public static void main(String[] args) {
  3.                 int [] arr={10,40,50,30,100,70};
  4.                 bubbleSort(arr);
  5.                 for(int i:arr){
  6.                         System.out.print(i+"\t");
  7.                 }
  8.                
  9.         }
  10.         //比较相邻2个数字和50的差,如果前面大于后面的,2个数字交换位置
  11.         public static void bubbleSort(int[] arr){
  12.                 for(int x=0;x < arr.length;x++){
  13.                         for(int y=arr.length-x-1;y>0;y--){
  14.                                 if(Math.abs(arr[y]-50)<Math.abs(arr[y-1]-50)){
  15.                                         int temp=arr[y];
  16.                                         arr[y]=arr[y-1];
  17.                                         arr[y-1]=temp;
  18.                                 }
  19.                         }
  20.                 }
  21.         }

  22. }
复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马