黑马程序员技术交流社区
标题:
今天早点睡,很充实给大家看今天的笔记数组的很详细。
[打印本页]
作者:
Dark县令
时间:
2015-3-12 01:09
标题:
今天早点睡,很充实给大家看今天的笔记数组的很详细。
本帖最后由 Dark县令 于 2015-3-12 01:10 编辑
数组的最值:
一、选择排序原理图:
/*
选择排序
*/
public static void selectSort(int[] arr)
{
for (int x=0;x<arr.length-1 ;x++ )//最后一个值不用比,当最后一个值的时候不用在比较了。
{
for (int y=x+1;x<arr.length ;y++ )
{
if(arr[x]>arr[y])
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
复制代码
二、
冒泡排序:相邻的两个元素进行比较如果符合条件就换位。
/*
冒泡排序法
*/
public static void bubbleSort(int[] arr)
{
for (int x=0;x<arr.length-1 ;x++ )
{
for (int y=0;y<arr.length-x-1 ;y++ )//-x:让每一次比较的元素减少,-1:是为了避免下标越界。
{
if(arr[y]>arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
复制代码
数组的查找:
public static void main(String[] args)
{
int[] arr = {3,1,5,4,2,9};
int index = getIndex(arr,2);//查找数组中元素2的下标索引位置。
System.out.println("index="+index);
}
/*
数组的查找
*/
//定义功能,获取key第一次出现在数组中的位置,如果返回的为-1,那么代表该key在数组中不存在。
public static int getIndex(int[] arr,int key)
{
for (int x=0;x<arr.length ;x++ )
{
if(arr[x]==key)
return x;
}
return -1;
}
/*
折半查找:可以提高效率但是必须保证该数组是有序的数组。
*/
public static int halfSearch(int[] arr, int key)
{
int min,mid,max;
min = 0;
max = arr.length-1;
mid = (max + min)/2;
while(arr[mid] != key)
{
if (arr[mid]>key)
max = mid - 1;
else
min = mid + 1;
if(min>max)
return -1;
mid = (max + min) / 2;
}
return mid;
}
public static void main(String[] args)
{
//int[] arr = {3,1,5,4,2,9};
//int index = getIndex(arr,2);//查找数组中元素2的下标索引位置。
int[] arr = {1,2,3,5,6,15,18,19,22,25};
int index = halfSearch(arr,22);
int index2 = halfSearch2(arr,3);
System.out.println("index="+index);
System.out.println("index2="+index2);
}
/*
折半查找的第二种方法
*/
public static int halfSearch2(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 -1;
}
public static void main(String[] args)
{
//int[] arr = {3,1,5,4,2,9};
//int index = getIndex(arr,2);//查找数组中元素2的下标索引位置。
int[] arr = {1,2,3,5,6,15,18,19,22,25};
int index = halfSearch(arr,22);
int index2 = halfSearch2(arr,3);
System.out.println("index="+index);
System.out.println("index2="+index2);
}
复制代码
进制的转换:
/*
十进制=>二进制
*/
public static void toBin(int num)
{
StringBuffer sb = new StringBuffer();
while(num>0)
{
//System.out.println(num%2);
sb.append(num%2);//通过对2取模来取余数
num = num/2;//通过除以2来取结果
}
System.out.println(sb.reverse());
}
/*
十进制=>十六进制
*/
public static void toHex(int num)
{
StringBuffer sb = new StringBuffer();//用StringBuffer来记录取到的最低四位变成一位的16进制数
for (int x=0;x<8 ;x++ )
{
int temp = num & 15; //通过与&15来取到最低四位的值
if(temp>9)//如果大于9就转换为字母
{
sb.append((char)(temp-10+'a'));
//System.out.println((char)(temp-10+'a'));
}
else
{
sb.append(temp);//不大于9就直接输出。
//System.out.println(temp);
}
num = num >>>4;//取到最低四位后就右移来取下一个最低四位。
}
System.out.println(sb.reverse());//因为是从最低四位数开始取的并记录在第一位,所以必须通过reverse来反转取到的16进制的数
}
/*
十进制=>十六进制
查表发十进制=>十六进制
0 1 2 3 4 5 6 7 8 9 A B C D E F十六进制中的元素。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
查表法:将所有的元素临时存储起来,建立一一对应关系,
每一次&15后的值作为索引去查建立好的表,就可以找到对应的元素
这样比-10+'a'简单理解。
这个表怎样建立呢?
可以通过数据的形式来定义。
*/
public static void toHex2(int num)
{
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//定义一个临时的容器。
char[] arr = new char[8];
int pos = arr.length;//定义一个指正来制定得到的最低位数的存储位置存在容器的最高位。
while(num != 0)
{
int temp = num & 15;
//System.out.println(chs[temp]+",");
arr[--pos] = chs[temp];//--pos是因为长度为8而最高位的下标为7.
num = num >>> 4;
}
for (int x=pos;x<arr.length ;x++ )//因为取到的第一位数放在容器的最高位可以直接按数组顺序打印,
//但是有元素的第一位应该是pos的值所有从pos处开始打印,直接打印到数组最后一位。
{
System.out.print(arr[x]+",");
}
}
复制代码
希望可以帮到大家!很多没有贴上来太多了!
file:///D:/Personal/Administrator/Documents/My%20Knowledge/temp/85039994-f911-49f7-b579-825e2ad8c8ce_128_files/e5f7ffbc-5f6f-41e9-96f9-5cfdc73abccd.png
2.png
(25.65 KB, 下载次数: 15)
下载附件
2015-3-12 01:06 上传
3.png
(97.08 KB, 下载次数: 9)
下载附件
2015-3-12 01:10 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2