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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ly631960324 中级黑马   /  2015-12-14 21:35  /  3102 人查看  /  14 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

25黑马币
随机给一个数组,元素越接近50往左排

14 个回复

倒序浏览
  1. import java.util.Arrays;

  2. public class Test3 {
  3.         public static void main(String[] args) {
  4.                 int[] arr = {23, 56, 29, 78, 77, 111, 12, 40};        //随机数组arr
  5.                
  6.                 int[] indexArr = new int[arr.length];                        //记录随机数组的元素索引
  7.                 int[] absArr = new int[arr.length];                                //绝对值数组absArr
  8.                 int[] newArr = new int[arr.length];                                //排序后的数组
  9.                
  10.                 for (int i = 0; i < arr.length; i++) {                        //遍历原数组
  11.                         absArr[i] = Math.abs(arr[i] - 50);                        //得到绝对值数组
  12.                         indexArr[i] = i;                                                        //得到索引数组
  13.                 }
  14.                 //对absArr进行选择排序,先找到最大的元素(即找到离50最远的数),存到absArr[0],并把在arr中的索引也存到indexArr[0]
  15.                 for (int i = 0; i < absArr.length - 1; i++) {
  16.                        
  17.                         for (int j = i + 1; j < absArr.length; j++) {
  18.                                 if (absArr[i] < absArr[j]) {
  19.                                         int temp = absArr[i];
  20.                                         absArr[i] = absArr[j];
  21.                                         absArr[j] = temp;
  22.                                         int index = indexArr[i];
  23.                                         indexArr[i] = indexArr[j];
  24.                                         indexArr[j] = index;
  25.                                        
  26.                                 }
  27.                                
  28.                         }
  29.                 }
  30.                
  31.                 System.out.print(Arrays.toString(indexArr));
  32.                 for (int i = 0; i < indexArr.length; i++) {
  33.                         System.out.print(arr[indexArr[i]] + " ");
  34.                 }       
  35.                
  36.         }

  37. }
复制代码


回复 使用道具 举报
来看看……
回复 使用道具 举报
好难啊,亲,吓死宝宝了,教教我吧.
回复 使用道具 举报
  int i = 0, k = 0;
  int[] aa = new int[50];
  Random rand = new Random();
  for (i = 0; i < 50; i++) {
//产生50个从1—100的随机数
   aa[i] = rand.nextInt(100);
   for (k = 0; k < i; k++) {
    if (aa[i] == 0)
     aa[i] = rand.nextInt(100);
//防止生成相同的数
    if (aa[i] == aa[k])
     aa[i] = rand.nextInt(100);
   }
  }
//对数组进行从小到大的顺序排序
  Arrays.sort(aa);
  for(int l = 0;l<aa.length;l++){
//输出排好序的数组
   System.out.print(aa[l]+"\t");
  }
}
回复 使用道具 举报

请问32行后面是不是写少了?获得了indexArr和absArr后怎么弄到newArr里呢?
回复 使用道具 举报
3楼太给力了~~
回复 使用道具 举报
过来涨涨姿势,应该也快该学这个了
回复 使用道具 举报
zcbcba123 发表于 2015-12-14 22:49
请问32行后面是不是写少了?获得了indexArr和absArr后怎么弄到newArr里呢?

原数组元素在数轴上的位置离50近就存放在新数组的前面,所以用到减50取绝对值.
原数组的元素(绝对值数组的元素)与原数组元素的索引一一对应,
对absArr进行排序,也要对原数组元素的索引做相应的排序(15行),这时再通过索引数组找到原数组对应的元素(33行)

50.jpg (5.22 KB, 下载次数: 175)

50.jpg
回复 使用道具 举报
白鲨 发表于 2015-12-14 22:39
int i = 0, k = 0;
  int[] aa = new int[50];
  Random rand = new Random();

不用随机产生数组,是任意给一个数组,或者键盘录入
回复 使用道具 举报
周亚飞 发表于 2015-12-14 23:21
原数组元素在数轴上的位置离50近就存放在新数组的前面,所以用到减50取绝对值.
原数组的元素(绝对值数组的 ...

哦。。。谢谢~~~
回复 使用道具 举报
好难的样子   
回复 使用道具 举报
来看看大神的解答
回复 使用道具 举报
我还不会
回复 使用道具 举报
都是大神级别的,膜拜
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马