黑马程序员技术交流社区

标题: 黑马程序员——函数笔记(3) [打印本页]

作者: luorenyu    时间: 2015-8-2 21:34
标题: 黑马程序员——函数笔记(3)
c、排序——换位置功能的提取
引言:发现无论是什么排序,都需要对满足条件的元素进行位置的置换,所以可以把这部分相同的代码提取出来,单独封装成为一个函数!
public static void swap(int[] arr,int a,int b)
   {
      inttemp=arr[a];
      arr[a]=arr;
      arr=temp;
   }
在上面b中的程序中,可以直接运行swaparr);
D、数组——查找
定义功能,获取key第一次出现在数组中的位置,如果返回是 -1,那么代表该key值在数组中不存在
实例:
class Index
{
   publicstatic void main(String[] args)
   {
      int[]arr={3,1,5,4,2,9};
      intindex=getIndex(arr,2);
      System.out.println("index="+index);
   }
   publicstatic int getIndex(int[]arr,int key)
   {
      for(int x=0;x<arr.length;x++)
      {
        if(arr[x]==key)
        {
           returnx;
        }
      }
      return-1;
   }
}
所以,如果在上面的程序的arr数组中出现了两个2,那么index输出的将是第一次2出现的角标值
折半查找
可以提高效率,但是必须要保证该数组是有序的数组。
classHalfSearch
{
   public static int halfSearch(int[] arr,intkey)
   {
      int min,mid,max;
      min=0;
      max=arr.length-1;
      mid=(max+min)/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 void main(String[] args)
   {
      int[] arr={2,4,5,7,19,32,45};
      int index=halfSearch(arr,55);
      System.out.println("index="+index);
   }
}
折半的第二种方式:
classHalfSearch2  
{
   public static int halfSearch_2(int[]arr,intkey)
   {
      int min =0,max=arr.length-1,mid;
      while (min<=max)
      {
        mid=(min+max)>>1;//等价于mid=(max+min)/2
        if (key>arr[mid])
           min=mid+1;
        else if (key<arr[mid])
           max=mid-1;
        else
           return mid;
      }
      return -1;
   }  
   public static void main(String[] args)
   {
      int[] arr={2,4,5,7,19,32,45};
      int index=halfSearch_2(arr,55);
      System.out.println("index="+index);
   }
}
练习题1:有一个有序的数组,想要将一个元素插入到该数组中,还要保证数组是有序的,如何获取该元素在数组中的位置 {2,4,5,7,19,32,45}
classHalfPractice
{
publicstatic int halfSearch_2(int[]arr,int key)
   {
      int min =0,max=arr.length-1,mid;
      while (min<=max)
      {
        mid=(min+max)>>1;
         if(key>arr[mid])
           min=mid+1;
        else if (key<arr[mid])
           max=mid-1;
        else
           return mid;
      }
      return min;
   }  
   public static void main(String[] args)
   {
      int[] arr={2,4,5,7,19,32,45};
      int index=halfSearch_2(arr,8);
      System.out.println("index="+index);
    }
}
就是在最后返回时将halfSearch2中的return-1改成了return min,此时的min就是8应该所在的位置!
练习题2:十进制转二进制
classArrayTests
{
   public static void tobin(int num)
   {
      while (num>0)
      {
        System.out.print(num%2);
        num=num/2;
      }
   }
   public static void main(String[] args)
   {
      tobin(6);
   }
}
最后的输出结果是011,将显示的结果反过来就是110就是6的2进制数!
练习题3:十进制转十六进制
      class ArrayTest16
{
   public static void toHex(int num)
   {
      for (int x=0;x<8 ;x++ )
      {
        int temp=num&15;
        if (temp>9)
           System.out.println((char)(temp-10+'A'));
        else
           System.out.println(temp);
        num= num>>> 4;
      }
   }
   public static void main(String[] args)
   {
      toHex(60);
   }
}


作者: 地狱里的帅灵魂    时间: 2015-8-2 23:05
高手奥,你进班了吗
作者: luorenyu    时间: 2015-8-2 23:16

还没进班呢,正在挤时间自学
作者: heavenzizou    时间: 2015-8-2 23:22
好长的代码~~~
作者: luorenyu    时间: 2015-8-2 23:47

都是视频学习的一部分了
作者: 地狱里的帅灵魂    时间: 2015-8-3 16:05
luorenyu 发表于 2015-8-2 23:16
还没进班呢,正在挤时间自学

恩,我也是。不过我报了个班
作者: 痴人说梦    时间: 2015-8-3 23:04
学习了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2