本帖最后由 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, 下载次数: 16)
-
3.png
(97.08 KB, 下载次数: 12)
|