A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Dark县令 于 2015-3-12 01:10 编辑

数组的最值:
    一、选择排序原理图:


  1. /*
  2. 选择排序
  3. */
  4. public static void selectSort(int[] arr)
  5.         {
  6.                 for (int x=0;x<arr.length-1 ;x++ )//最后一个值不用比,当最后一个值的时候不用在比较了。
  7.                 {
  8.                         for (int y=x+1;x<arr.length ;y++ )
  9.                         {
  10.                                 if(arr[x]>arr[y])
  11.                                 {
  12.                                         int temp = arr[x];
  13.                                         arr[x] = arr[y];
  14.                                         arr[y] = temp;
  15.                                 }
  16.                         }
  17.                 }
  18.         }
复制代码

二、冒泡排序:相邻的两个元素进行比较如果符合条件就换位。
  1. /*
  2.                 冒泡排序法
  3.         */
  4.         public static void bubbleSort(int[] arr)
  5.         {
  6.                 for (int x=0;x<arr.length-1 ;x++ )
  7.                 {
  8.                         for (int y=0;y<arr.length-x-1 ;y++ )//-x:让每一次比较的元素减少,-1:是为了避免下标越界。
  9.                         {
  10.                                 if(arr[y]>arr[y+1])
  11.                                 {
  12.                                         int temp = arr[y];
  13.                                         arr[y] = arr[y+1];
  14.                                         arr[y+1] = temp;
  15.                                 }
  16.                         }
  17.                 }
  18.         }
复制代码

数组的查找:
  1. public static void main(String[] args)
  2.         {
  3.                 int[] arr = {3,1,5,4,2,9};
  4.                 int index = getIndex(arr,2);//查找数组中元素2的下标索引位置。
  5.                 System.out.println("index="+index);
  6.         }
  7.         /*
  8.                 数组的查找
  9.         */
  10.         //定义功能,获取key第一次出现在数组中的位置,如果返回的为-1,那么代表该key在数组中不存在。
  11.         public static int getIndex(int[] arr,int key)
  12.         {
  13.                 for (int x=0;x<arr.length ;x++ )
  14.                 {
  15.                         if(arr[x]==key)
  16.                                 return x;
  17.                 }
  18.                 return -1;
  19.         }
  20. /*
  21.                 折半查找:可以提高效率但是必须保证该数组是有序的数组。
  22.         */
  23.         public static int halfSearch(int[] arr, int key)
  24.         {
  25.                 int min,mid,max;
  26.                 min = 0;
  27.                 max = arr.length-1;
  28.                 mid = (max + min)/2;
  29.                
  30.                 while(arr[mid] != key)
  31.                 {
  32.                         if (arr[mid]>key)
  33.                                 max = mid - 1;
  34.                         else
  35.                                 min = mid + 1;
  36.                         if(min>max)
  37.                                 return -1;
  38.                         mid = (max + min) / 2;
  39.                 }
  40.                 return mid;
  41.         }
  42. public static void main(String[] args)
  43.         {
  44.                 //int[] arr = {3,1,5,4,2,9};
  45.                 //int index = getIndex(arr,2);//查找数组中元素2的下标索引位置。
  46.                 int[] arr = {1,2,3,5,6,15,18,19,22,25};
  47.                 int index = halfSearch(arr,22);
  48.                 int index2 = halfSearch2(arr,3);
  49.                 System.out.println("index="+index);
  50.                 System.out.println("index2="+index2);
  51.         }
  52. /*
  53.                 折半查找的第二种方法
  54.         */
  55.         public static int halfSearch2(int[] arr, int key)
  56.         {
  57.                 int min = 0,max = arr.length-1,mid;
  58.                 while(min<=max)
  59.                 {
  60.                         mid = (min+max) >> 1;
  61.                         if(key>arr[mid])
  62.                                 min = mid + 1;
  63.                         else if (key<arr[mid])
  64.                                 max = mid - 1;
  65.                         else
  66.                                 return mid;
  67.                 }
  68.                 return -1;
  69.         }
  70. public static void main(String[] args)
  71.         {
  72.                 //int[] arr = {3,1,5,4,2,9};
  73.                 //int index = getIndex(arr,2);//查找数组中元素2的下标索引位置。
  74.                 int[] arr = {1,2,3,5,6,15,18,19,22,25};
  75.                 int index = halfSearch(arr,22);
  76.                 int index2 = halfSearch2(arr,3);
  77.                 System.out.println("index="+index);
  78.                 System.out.println("index2="+index2);
  79.         }
复制代码

进制的转换:
  1. /*
  2.                 十进制=>二进制
  3.         */
  4.         public static void toBin(int num)
  5.         {
  6.                 StringBuffer sb = new StringBuffer();
  7.                 while(num>0)
  8.                 {
  9.                         //System.out.println(num%2);
  10.                         sb.append(num%2);//通过对2取模来取余数
  11.                         num = num/2;//通过除以2来取结果
  12.                 }
  13.                 System.out.println(sb.reverse());
  14.         }
  15. /*
  16.                 十进制=>十六进制
  17.         */
  18.         public static void toHex(int num)
  19.         {
  20.                 StringBuffer sb = new StringBuffer();//用StringBuffer来记录取到的最低四位变成一位的16进制数
  21.                 for (int x=0;x<8 ;x++ )
  22.                 {
  23.                         int temp = num & 15;  //通过与&15来取到最低四位的值
  24.                         if(temp>9)//如果大于9就转换为字母
  25.                         {
  26.                                 sb.append((char)(temp-10+'a'));
  27.                                 //System.out.println((char)(temp-10+'a'));
  28.                         }
  29.                         else
  30.                         {
  31.                                 sb.append(temp);//不大于9就直接输出。
  32.                                 //System.out.println(temp);
  33.                         }
  34.                         num = num >>>4;//取到最低四位后就右移来取下一个最低四位。
  35.                 }
  36.                 System.out.println(sb.reverse());//因为是从最低四位数开始取的并记录在第一位,所以必须通过reverse来反转取到的16进制的数
  37.         }
  38.   
  39.         /*
  40.                 十进制=>十六进制
  41.                 查表发十进制=>十六进制
  42.                 0 1 2 3 4 5 6 7 8 9  A  B  C  D  E  F十六进制中的元素。
  43.                 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  44.                 查表法:将所有的元素临时存储起来,建立一一对应关系,
  45.                 每一次&15后的值作为索引去查建立好的表,就可以找到对应的元素
  46.                 这样比-10+'a'简单理解。
  47.                 这个表怎样建立呢?
  48.                 可以通过数据的形式来定义。
  49.         */
  50.         public static void toHex2(int num)
  51.         {
  52.                 char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  53.                 //定义一个临时的容器。
  54.                 char[] arr = new char[8];
  55.                 int pos = arr.length;//定义一个指正来制定得到的最低位数的存储位置存在容器的最高位。
  56.                 while(num != 0)
  57.                 {
  58.                         int temp = num & 15;
  59.                         //System.out.println(chs[temp]+",");
  60.                         arr[--pos] = chs[temp];//--pos是因为长度为8而最高位的下标为7.
  61.                         num = num >>> 4;
  62.                 }
  63.                 for (int x=pos;x<arr.length ;x++ )//因为取到的第一位数放在容器的最高位可以直接按数组顺序打印,
  64.                                                                                   //但是有元素的第一位应该是pos的值所有从pos处开始打印,直接打印到数组最后一位。
  65.                 {
  66.                         System.out.print(arr[x]+",");
  67.                 }
  68.         }
复制代码

希望可以帮到大家!很多没有贴上来太多了!
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)

2.png

3.png (97.08 KB, 下载次数: 8)

3.png

点评

赞!加油  发表于 2015-3-13 23:55

1 个回复

倒序浏览
您需要登录后才可以回帖 登录 | 加入黑马