本帖最后由 BlueSun 于 2015-5-25 19:24 编辑
- </blockquote></div><span style="background-color: rgb(247, 247, 247);">学习了毕老师折半查找的视频,在视频后半部分,有一道面试题:将一个数插入有序数组,插入第几位?这是折半查找的深化。</span><div><div class="blockcode"><blockquote>public static void main(String [] args)
- {
- int arr[]={4,8,9,11,23,45};
- int a=zbcz(arr,10);
- System.out.println("把10插入第"+a+"位后面");
- }
- public static int zbcz(int arr[],int k)
- {
- int max=arr.length-1;
- int min=0;
- int mid=(max+min)>>1;
- while(min<=max)
- {
- mid=(max+min)/2;
- if(arr[mid]<k)
- {
- min=mid+1;
- }
- else if(arr[mid]>k)
- {
- max=mid-1;
- }
-
- else
- {
- return mid;
- }
- }
- return min;
- }
-
- }
复制代码
忍不住自己动手试试,直接显示插入后数组。我想到了两种方法,
第一种最简单: 建立新数组,把原数组+先要插入的数全部赋值给新数组,把新数组重新排序。。。。。一种白痴方法 第二种: 通过前边的折半查找返回的数组角标位置直接插入。这个方法让我费了半天劲,基本上这个方法让我把视频前几天的复习了一遍~_~! 程序能运行,结果正常,请大家来看看还有什么错么。 - public class Score {
- public static void main(String [] args)
- {
- int arr[]={4,8,9,11,23,45};
- int a=zbcz(arr,10);
- System.out.println("把10插入第"+a+"位后面");
- System.out.print("插入后数组是:");
- int b[]=new int[arr.length+1];//定义新数组用来盛放原数组+要插入的数
-
- for(int x=0,y=0;y<arr.length;x++,y++)
- {b[x]=arr[y];}//把原数组赋值给新数组
-
- b[a]=10;
-
- for(int m=b.length-1;m>a;m--)
- {
- b[m]=arr[m-1];
-
- }
-
- for(int l=0;l<b.length;l++)
-
- System.out.print(b[l]+",");
- /*
- for(int m=a;m<b.length-a;m++)
- {
- b[m+1]=b[m];
- }
- System.out.println("新数组"+b);
- */
-
- }
复制代码
|
|