黑马程序员技术交流社区
标题: 黑马程序员——函数笔记(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中的程序中,可以直接运行swap(arr);
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
恩,我也是。不过我报了个班
作者: 痴人说梦 时间: 2015-8-3 23:04
学习了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |