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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 BlueSun 于 2015-5-25 19:24 编辑
  1. </blockquote></div><span style="background-color: rgb(247, 247, 247);">学习了毕老师折半查找的视频,在视频后半部分,有一道面试题:将一个数插入有序数组,插入第几位?这是折半查找的深化。</span><div><div class="blockcode"><blockquote>public static void main(String [] args)
  2.         {
  3.                 int arr[]={4,8,9,11,23,45};
  4.                 int a=zbcz(arr,10);
  5.                 System.out.println("把10插入第"+a+"位后面");
  6. }
  7. public static int zbcz(int arr[],int k)
  8.         {
  9.                 int max=arr.length-1;
  10.                 int min=0;
  11.                 int mid=(max+min)>>1;
  12.                 while(min<=max)
  13.                 {
  14.                         mid=(max+min)/2;
  15.                         if(arr[mid]<k)
  16.                         {
  17.                                 min=mid+1;
  18.                         }
  19.                         else if(arr[mid]>k)
  20.                         {
  21.                                 max=mid-1;
  22.                         }
  23.                        
  24.                         else
  25.                         {
  26.                                 return mid;
  27.                         }
  28.                 }
  29.                 return min;
  30.         }
  31.       
  32. }
复制代码




忍不住自己动手试试,直接显示插入后数组。我想到了两种方法,
第一种最简单:
建立新数组,把原数组+先要插入的数全部赋值给新数组,把新数组重新排序。。。。。一种白痴方法
第二种:
通过前边的折半查找返回的数组角标位置直接插入。这个方法让我费了半天劲,基本上这个方法让我把视频前几天的复习了一遍~_~!   
程序能运行,结果正常,请大家来看看还有什么错么。
  1. public class Score {
  2.         public static void main(String [] args)
  3.         {
  4.                 int arr[]={4,8,9,11,23,45};
  5.                 int a=zbcz(arr,10);
  6.                 System.out.println("把10插入第"+a+"位后面");
  7.                 System.out.print("插入后数组是:");
  8.                 int b[]=new int[arr.length+1];//定义新数组用来盛放原数组+要插入的数
  9.                
  10.                 for(int x=0,y=0;y<arr.length;x++,y++)
  11.                 {b[x]=arr[y];}//把原数组赋值给新数组
  12.                
  13.                 b[a]=10;
  14.         
  15.                 for(int m=b.length-1;m>a;m--)
  16.                 {
  17.                         b[m]=arr[m-1];
  18.                         
  19.                 }
  20.                
  21.                 for(int l=0;l<b.length;l++)
  22.                
  23.                 System.out.print(b[l]+",");
  24.                 /*
  25.                 for(int m=a;m<b.length-a;m++)
  26.                 {
  27.                         b[m+1]=b[m];
  28.                 }
  29.                 System.out.println("新数组"+b);
  30.                 */
  31.                
  32.         }
复制代码




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马