初学者:java有序数组插值

来源:互联网 发布:c获取网卡mac地址 编辑:程序博客网 时间:2024/06/11 13:26

题目:有(无)序数组arr[],插入数字key,要求插入一个数值使得数组有序。
问题分析:第一步:先找到要插值的位置position
第二步:新建数组放插入值后的数组
第三步:运行
难点:1、如果数组非有序,先排序(折半查找法比较优)
2、要新建一个数组存储
3、输出时,由于java不能输出整个数组,需要用到循环输出数组或者使用Arrays.toString语句,使用上述语句记得加以下语句在代码最前面 import java.util.Arrays;
代码实现:

import java.util.Arrays;class  ArrayDemo{    public static void main(String[] args)     {        int arr[]={121,4654,32,65,45,-12,64};        System.out.print("排序前");            bianli(arr);            paixuyouhua(arr);        System.out.print("排序后");            bianli(arr);        System.out.print("插入数字后数组为") ;                     insert(arr,63);//插入数字 63        }    //遍历数组,美观~    public static void bianli(int [] arry)    {        System.out.print("[");        for(int x=0;x<arry.length;x++)        {            if(x!=arry.length-1)            System.out.print(arry[x]+",");            else            System.out.println(arry[x]+"]");        }    }    //定义元素交换函数swap()    public static void swap(int arr[],int a,int b)    {         if(arr[a]>arr[b])        {             int temp=arr[a];             arr[a]=arr[b];             arr[b]=temp;         }     }    //数组排序    public static void paixuyouhua(int []arr)      {        for (int x =0;x<arr.length-1 ;x++ )        {             int num = arr[x];             int index = x;            for (int y=x+1;y<arr.length ;y++ )            {                   if( num>arr[y])                {                     num=arr[y];                     index=y;                }            }            if(index!=x)                    swap (arr,x,index);        }       }      //定义数组折半查找函数halfSearch_1()      public static int halfSearch_1 (int arr[],int num)    {        int max,mid,min;        max=arr.length;        min=0;        for (int x=0;x<arr.length ;x++ )        {            //折半查找插入数的位置            while(max>=min)            {                mid=(max+min)>>1;            if(arr[mid]<num)                min=mid+1;            else if(arr[mid]>num)                max=mid-1;            }        }        return max;    }        //另一种折半查找函数,只是循环条件不同        public static int halfSearch(int arr[],int key)    {        int max,mid,min;        max=arr.length-1;        min=0;        mid=(min+max)/2;        while(arr[mid]!=key)//与上面面那种折半的循环条件语句不同        {            if(key>arr[mid])                min=mid+1;            else if(key<arr[mid])                max=mid-1;            if(min>max)        return -1;            mid=(max+min)/2;        }            return mid;    }    public static int[] insert(int arr[],int key)    {        int position = halfSearch_1(arr,key)+1 ;        int arry[]=new int [arr.length+1];        for(int x=0;x<arry.length;x++)        {            if(x<position)                arry[x]=arr[x];            else if (x>position)                 arry[x]=arr[x-1];            else                arry[position]=key;        }        System.out.println(Arrays.toString(arry));        return arry;//返回数组,方便以后处理    }}   

运行结果:
运行结果图