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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class ArrayTools
  2. {
  3.         //遍历打印数组中所有元素
  4.         public static void arrayPrint(int[] arr)
  5.         {
  6.                 System.out.print("[");
  7.                 for(int i=0;i<arr.length;i++)
  8.                 {
  9.                         if(i!=arr.length-1)
  10.                                 System.out.print(arr[i]+",");
  11.                         else
  12.                                 System.out.println(arr[i]+"]");
  13.                 }
  14.         }

  15.    //数组两元素值进行交换
  16.     private static void exchange(int[] arr,int a,int b)
  17.         {
  18.                 int temp;
  19.                 temp=arr[a];
  20.                 arr[a]=arr[b];
  21.                 arr[b]=temp;
  22.         }
  23.    //获取数组的最大值
  24.    public static int getMax(int[] arr)
  25.    {
  26.            int max=0;
  27.            for(int i=1;i<arr.length;i++)
  28.            {
  29.                    if(arr[max]<arr[i])
  30.                            exchange(arr,max,i);
  31.            }
  32.            return arr[max];
  33.    }

  34.    //获取数组的最小值
  35.     public static int getMin(int[] arr)
  36.    {
  37.            int min=0;
  38.            for(int i=1;i<arr.length;i++)
  39.            {
  40.                    if(arr[min]>arr[i])
  41.                            exchange(arr,min,i);
  42.            }
  43.            return arr[min];
  44.    }

  45.    //选择排序法,简单来说就是先找出最小值(或最大值),
  46.    //放在角标为0(或最大角标)的元素下,再找出第二小(或大)的值放在角标为1的元素下,
  47.    //以此类推,直到找出最大值
  48.    public static void sort_1(int[] arr)
  49.    {
  50.        for(int i=0;i<arr.length-1;i++)
  51.            {          
  52.                    for(int j=i+1;j<arr.length;j++)
  53.                {
  54.                            if(arr[i]>arr[j])
  55.                                    exchange(arr,i,j);
  56.                    }
  57.            }
  58.    }

  59.    //冒泡排序,已知一个数组,如果升序排列,比较相邻两个元素,如果角标小的元素值大,则两者交换,
  60.    //这样就把最大值放在最末尾,然后再重复上一过程,直到所有元素都排列好。
  61.    public static void sort_2(int[] arr)
  62.    {
  63.            for(int i=0;i<arr.length-1;i++)
  64.            {
  65.                    for(int j=0;j<arr.length-i-1;j++)
  66.                    {
  67.                            if(arr[j]>arr[j+1])
  68.                                    exchange(arr,j,j+1);
  69.                    }
  70.            }
  71.    }

  72.    
  73.    //折半查找,第一种方法,必须保证数组是有序的
  74.    public static int halfSearch_1(int[] arr,int key)
  75.    {
  76.         int min,max,mid;
  77.                 min=0;
  78.                 max=arr.length-1;
  79.                 mid=(min+max)/2;

  80.                 while(arr[mid]!=key)
  81.            {
  82.            if(key>arr[mid])
  83.                            min=mid+1;
  84.                    else if(key<arr[mid])
  85.                            max=mid-1;
  86.            mid=(max+min)/2;
  87.                    if(min>max)
  88.                            return -1;
  89.            }
  90.            return mid;
  91.    }

  92.   //折半查找第二种方法,必须保证数组时有序的。
  93.   public static int halfSearch_2(int[] arr,int key)
  94.    {
  95.         int min,max,mid;
  96.                 min=0;
  97.                 max=arr.length-1;

  98.                 while(min<=max)
  99.            {
  100.            mid=(min+max)/2;
  101.                    if(key>arr[mid])
  102.                            min=mid+1;
  103.                    else if(key<arr[mid])
  104.                            max=mid-1;
  105.                    else
  106.                            return mid;
  107.            }
  108.            return -1;
  109.    }

  110.    //在一个有序数组中利用折半查找法,插入元素
  111.    public static int[] insert(int[] arr,int el)
  112.         {
  113.                
  114.                 int index=halfSearch_1(arr,el);
  115.                 if(index!=-1)
  116.                         return insert(arr,index,el);
  117.                 else
  118.                 {
  119.                         int min,max,mid;
  120.                         min=0;
  121.                         max=arr.length-1;
  122.             
  123.                     while(min<=max)
  124.                 {
  125.                mid=(min+max)/2;
  126.                        if(el>arr[mid])
  127.                                min=mid+1;
  128.                        else if(el<arr[mid])
  129.                                max=mid-1;
  130.                 }

  131.             return insert(arr,min,el);
  132.                 }

  133.         }

  134.    //在一个数组中的指定位置插入一个元素,
  135.         private static int[] insert(int[] arr,int index,int el)
  136.         {
  137.           int[] arr2=new int[arr.length+1];
  138.                   for(int i=0;i<arr2.length;i++)
  139.                     {
  140.                            if(i<index)
  141.                                    arr2[i]=arr[i];
  142.                            else if(i==index)
  143.                                    arr2[i]=el;
  144.                            else
  145.                                    arr2[i]=arr[i-1];
  146.                     }
  147.                         return arr2;
  148.         }
  149. }
复制代码

1 个回复

倒序浏览
不知代码是否有错,或者有更简体的代码,请各位指正。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马