本帖最后由 itheima_llt 于 2015-3-20 09:47 编辑
4.2排序 4.2.1选择排序 - <b><b>import java.util.*;
- /*
- 对给定数组进行排序。<p style="line-height: 30px; text-indent: 2em;">
- {5,1,6,4,2,8,9}</p>
- <p style="line-height: 30px; text-indent: 2em;">*/
- class ArrayTest2
- {</p>
- <p style="line-height: 30px; text-indent: 2em;"> /*
- 选择排序。
- 内循环结束一次,最值出现头角标位置上。
- */
- public static void selectSort(int[] arr)
- {
- for (int x=0; x<arr.length-1 ; x++)
- {
- for(int y=x+1; y<arr.length; y++)
- {
- if(arr[x]>arr[y])
- {
- /*
- int temp = arr[x];
- arr[x] = arr[y];
- arr[y]= temp;
- */
- swap(arr,x,y);
- }
- }
- }
- }</p>
- <p style="line-height: 30px; text-indent: 2em;"> /*
- 发现无论什么排序。都需要对满足条件的元素进行位置置换。
- 所以可以把这部分相同的代码提取出来,单独封装成一个函数。
- */
- public static void swap(int[] arr,int a,int b)
- {
- int temp = arr[a];
- arr[a] = arr[b];
- arr[b] = temp;
- }
- public static void main(String[] args)
- {
- int[] arr = {5,1,6,4,2,8,9};
- //排序前;
- printArray(arr);</p>
- <p style="line-height: 30px; text-indent: 2em;"> //排序
- //selectSort(arr);
- //bubbleSort(arr);</p>
- <p style="line-height: 30px; text-indent: 2em;"> //Arrays.sort(arr);//java中已经定义好的一种排序方式。开发中,对数组排序。要使用该句代码。
- //排序后:
- printArray(arr);</p>
- <p style="line-height: 30px; text-indent: 2em;"> }</p>
- <p style="line-height: 30px; text-indent: 2em;"> public static void printArray(int[] arr)
- {
- System.out.print("[");
- for(int x=0; x<arr.length; x++)
- {
- if(x!=arr.length-1)
- System.out.print(arr[x]+", ");
- else
- System.out.println(arr[x]+"]");</p>
- <p style="line-height: 30px; text-indent: 2em;"> }
- }
- }</p></b></b>
复制代码
4.2.2冒泡排序 - <b><b><b>/*
- 冒泡排序
- */<p>
- </p><p style="line-height: 30px; text-indent: 2em;"> 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;
- */
- swap(arr,y,y+1);
- }
- }
- }
- }</p></b></b></b>
复制代码
4.3折半查找
数组的查找操作。
练习:有一个有序的数组,想要将一个元素插入到该数组中,
还要保证该数组是有序的。如何获取该元素在数组中的位置。
- import java.util.*;
- class ArrayTest4
- {
- public static void main(String[] args)
- {
- // int[] arr = {3,2,1,5,4,2,9};
- // int index = getIndex(arr,2);
- // System.out.println("index="+index);<p>
- </p><p style="line-height: 30px; text-indent: 2em;">int[] arr = {2,4,5,7,8,19,32,45};//8</p>
- <p style="line-height: 30px; text-indent: 2em;">int index = getIndex_2(arr,190);
- System.out.println("index="+index);</p>
- <p style="line-height: 30px; text-indent: 2em;">// int x = Arrays.binarySearch(arr,190);//java提供好的一个进行折半查找的功能。开发时使用这个。
- // System.out.println("x="+x);</p>
- <p style="line-height: 30px; text-indent: 2em;">}</p>
- <p style="line-height: 30px; text-indent: 2em;">public static int getIndex_2(int[] arr,int key)
- {
- int min = 0,max = arr.length-1,mid;</p>
- <p style="line-height: 30px; text-indent: 2em;">while(min<=max)
- {
- mid = (max+min)>>1;</p>
- <p style="line-height: 30px; text-indent: 2em;">if(key>arr[mid])
- min = mid + 1;
- else if(key<arr[mid])
- max = mid - 1;
- else
- return mid;
- }
- return min;
- }</p>
- <p style="line-height: 30px; text-indent: 2em;">/*
- 折半的第二种方式。
- */
- public static int halfSearch_2(int[] arr,int key)
- {
- int min = 0,max = arr.length-1,mid;</p>
- <p style="line-height: 30px; text-indent: 2em;">while(min<=max)
- {
- mid = (max+min)>>1;</p>
- <p style="line-height: 30px; text-indent: 2em;">if(key>arr[mid])
- min = mid + 1;
- else if(key<arr[mid])
- max = mid - 1;
- else
- return mid;
- }
- return -1;
- }
- /*
- 折半查找。提高效率,但是必须要保证该数组是有序的数组。
- */
- public static int halfSearch(int[] arr,int key)
- {
- int min,max,mid;
- min = 0;
- max = arr.length-1;
- mid = (max+min)/2;</p>
- <p style="line-height: 30px; text-indent: 2em;">while(arr[mid]!=key)
- {
- if(key>arr[mid])
- min = mid + 1;
- else if(key<arr[mid])
- max = mid - 1;</p>
- <p style="line-height: 30px; text-indent: 2em;">if(min>max)
- return -1;
- mid = (max+min)/2;
- }
- return mid;
- }</p>
- <p style="line-height: 30px; text-indent: 2em;">//定义功能,获取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;
- }
- }</p>
复制代码
五、数组中的数组5.1二维数组 - 格式1:int[][] arr = new int[3][2];
- 定义了名称为arr的数组
- 二维数组中有3个一维数组
- 每一个一位数组中有2个元素
- 一位数组的名称分别为arr[0],arr[1],arr[2];
- 给第一个一维数组1脚标位赋值为78的写法是:arr[0][1]=78;
- 格式2:Int[][] arr = new int[3][];
- 二位数组中有3个 一维数组
- 每个一维数组都是默认初始化值为NULL
- 可以对这个三个一维数组分别进行初始化
- arr[0] = new int [3];
- arr[1] = new int[1];
- arr[2] = new int [2];
- 格式3:int[][]arr = {{3,8,2},{2,7},{9,0,1,6}};
- 定义一个名称为arr的二维数组
- 二维数组中的又三个一维数组
- 每一个一维数组中具体元素也都已初始化
- 第一个一维数组arr[0] = {3,8,2};
- 第二个一维数组arr[1] = {2,7};
- 第三个一维数组的长度表示方式: arr[2].length;
5.2进制转换 1.十进制转二进制
- 2.十进制转十六进制
- 3.查表法–十进制转十六进制
- 4.查表法:十进制转二进制
- 5.进制转化优化
- package test;<p>
- </p><p style="line-height: 30px; text-indent: 2em;">public class Demo7 {</p>
- <p style="line-height: 30px; text-indent: 2em;">public static void main(String[] args) {
- toBin(-6);</p>
- <p style="line-height: 30px; text-indent: 2em;">}</p>
- <p style="line-height: 30px; text-indent: 2em;">//查表法:十进制转二进制
- private static void toBin(int num)
- {
- //建立一个字符数组,存储二进制元素
- char[] chs = {'0','1'};
- //建立一个临时字符数组,存计算结果
- char[] arr = new char[32];
- //定义一个指针,指向数组表表尾
- int pos =arr.length;
- //循环计算
- while(num != 0 )
- {
- int temp = num & 1;
- arr[--pos] = chs[temp];
- num = num >>>1;
- }
- //遍历输出二进制
- for(int i = pos; i < arr.length; ++i)
- {
- System.out.print(arr[i]);
- }
- }
- }</p>
复制代码
- package test;<p>
- </p><p style="line-height: 30px; text-indent: 2em;">/**
- * 进制转换优化
- * @author 廖林涛
- *
- */
- public class Demo8 {</p>
- <p style="line-height: 30px; text-indent: 2em;">public static void main(String[] args) {
- //toHex(10);
- //toOct(10);
- toBin(10);</p>
- <p style="line-height: 30px; text-indent: 2em;">}</p>
- <p style="line-height: 30px; text-indent: 2em;">//十进制转十六进制
- private static void toHex(int num)
- {
- trans(num,15,4);
- }</p>
- <p style="line-height: 30px; text-indent: 2em;">//十进制转八进制
- private static void toOct(int num)
- {
- trans(num,7,3);
- }</p>
- <p style="line-height: 30px; text-indent: 2em;">//十进制转二进制
- private static void toBin(int num)
- {
- trans(num,1,1);
- }</p>
- <p style="line-height: 30px; text-indent: 2em;">private static void trans(int num,int base ,int offset)
- {
- //num:要转的十进制数;base:与运算的基数;offset:num偏移的位数</p>
- <p style="line-height: 30px; text-indent: 2em;">//如果输入0,则直接输出0
- if(num == 0)
- {
- System.out.println(0);
- }
- //查表法:建立一个包含基本元素的表
- char[] chs = new char[]{'0','1','2','3',
- '4','5','6','7',
- '8','9','A','B',
- 'C','D','E','F'};
- //建立一个临时容器存储
- char[] arr = new char[32];</p>
- <p style="line-height: 30px; text-indent: 2em;">//建立一个指针
- int pos = arr.length;
- //循环
- while(num != 0)
- {
- int temp = num & base;
- arr[--pos] = chs[temp];
- num = num >>> offset;
- }
- //循环遍历输出
- for(int i = pos ;i < arr.length;++i)
- {
- System.out.print(arr[i]);
- }
- }</p>
- <p style="line-height: 30px; text-indent: 2em;">}</p>
复制代码
|