题目是看一个坛友发的,自己屡下思路 把代码写了,供大家参考题目大致要求:随机给一个数组,将数组中越靠近50的数往左放,即从左到右跟50的差值的绝对值越大
- /*我的思路
- 1、将数组每个元素减 50 arr[i] = arr[i]-50 ;
- 则问题可转换为普通的排序问题
- 2、将arr[i]的元素按绝对值从小到大排序
- void swap(int[] arr,int i,int j)
- {
- if( Math.abs(arr[i]) > Math.abs(arr[j]) )
- {
- int temp = arr[i];
- arr[i] = arr [j];
- arr[j] = temp;
- }
- }
- 3、将排序后的数组每个元素加上50,arr[i] = arr[i]+50;
- 则越靠近50的数就越靠左
- */
- class Sort
- {
- static void swap(int[] arr,int i,int j) //交换数值,绝对值小的在左边
- {
- if( Math.abs(arr[i]) > Math.abs(arr[j]) )
- {
- int temp = arr[i];
- arr[i] = arr [j];
- arr[j] = temp;
- }
- }
- static void printArr(int[] arr) //定义函数打印数组
- {
- for(int i = 0; i < arr.length ; i++)
- {
- System.out.print(arr[i]+" ");
- }
- System.out.println();
- }
- 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 };
- System.out.println("排序前数组:");
- printArr(arr); //输出数组
- for(int i = 0 ; i < arr.length-1 ; i++)
- arr[i] -= 50 ; //每个元素减50
- for(int i = 0 ; i < arr.length-1 ; i++)
- {
- for(int j = i+1 ; j < arr.length; j++)
- {
- swap(arr,i,j);
- }
- }
-
- for(int i = 0; i < arr.length ; i++)
- {
- arr[i] = arr[i] + 50; //将数组值还原
- }
- System.out.println("排序后数组:");
- printArr(arr); //输出数组
-
- }
- }
复制代码
|
-
排序.png
(5.8 KB, 下载次数: 30)
排序的结果
|