黑马程序员技术交流社区
标题:
面试题 排序的代码:将越靠近50的数左插
[打印本页]
作者:
fmi110
时间:
2015-7-9 10:10
标题:
面试题 排序的代码:将越靠近50的数左插
题目是看一个坛友发的,自己屡下思路 把代码写了,供大家参考题目大致要求:随机给一个数组,将数组中越靠近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)
下载附件
2015-7-9 10:10 上传
排序的结果
作者:
牵着蜗牛去逛街
时间:
2015-7-9 12:19
学习了,看来面试有点难啊
作者:
心在左边跳
时间:
2015-7-9 13:55
本帖最后由 心在左边跳 于 2015-7-9 13:56 编辑
public class Test {
public static void main(String[] args) {
int [] arr={10,40,50,30,100,70};
bubbleSort(arr);
for(int i:arr){
System.out.print(i+"\t");
}
}
//比较相邻2个数字和50的差,如果前面大于后面的,2个数字交换位置
public static void bubbleSort(int[] arr){
for(int x=0;x < arr.length;x++){
for(int y=arr.length-x-1;y>0;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;
}
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2