初学者:java有序数组插值

题目:有(无)序数组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;xif(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;x1 ;x++ )
        {
             int num = arr[x];
             int index = x;
            for (int y=x+1;yif( 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//折半查找插入数的位置
            while(max>=min)
            {
                mid=(max+min)>>1;
            if(arr[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(key1;
            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;xif(xelse if (x>position)
                 arry[x]=arr[x-1];
            else
                arry[position]=key;
        }
        System.out.println(Arrays.toString(arry));
        return arry;//返回数组,方便以后处理
    }
}   

运行结果:
初学者:java有序数组插值_第1张图片

你可能感兴趣的:(Java)