(说明:昨天网络出现了问题导致昨天的没有按时上传,这篇算是昨天的,今天晚上照常上传今天的内容)
本次主题:数组拷贝、排序、二分法
1、数组拷贝
a.java.lang中System
类包含一些有用的类字段和方法。它不能被实例化。
在 System
类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。
public static void arraycopy(Object src, int srcPos, Object dest, int destPos,
int length)
- 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从
src
引用的源数组到
dest
引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于length
参数。源数组中位置在srcPos
到srcPos+length-1
之间的组件被分别复制到目标数组中的destPos
到destPos+length-1
位置。
b.java.util中的Arrays类,此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。
toString
public static String toString(short[] a)
- 返回指定数组内容的字符串表示形式。字符串表示形式由数组的元素列表组成,括在方括号("[]")中。相邻元素用字符 ",
"(逗号加空格)分隔。这些元素通过 String.valueOf(short) 转换为字符串。如果 a 为
null,则返回 "null"。
c.打印数组
1 package array;
2
3 import java.util.Arrays;
4
5 public class array {
6 public static void main(String[] args)
7 {
8 int[] a={1,2,43,12,5,65,23};
9 System.out.println(a);
10 System.out.println(Arrays.toString(a));
11 Arrays.sort(a);
12 System.out.println(Arrays.toString(a));
13 }
14 }
运行结果:
[[email protected]
[1, 2, 43, 12, 5, 65, 23]
[1, 2, 5, 12, 23, 43,
65]
直接打印a结果可能是地址,[I代表是一个int数组,‘@’后面跟的是数组所在的地址。
d.对象也可以排序,不过要自己定义compareTo方法,这个放到后面容器的地方记录。
2,数组排序
冒泡排序
1 package array;
2
3 import java.util.Arrays;
4
5 public class maopao {
6 public static void main(String[] args)
7 {
8 int[] a={1,13,4,2,5,23,6,9,3};
9 sort(a);
10 System.out.println(Arrays.toString(a));
11 }
12 public static void sort(int[] a)
13 {
14 int i,j;
15 int temp=0;
16 for(i=0;i<a.length;i++)
17 {
18 for(j=0;j<a.length-1-i;j++)
19 {
20 if(a[j]>a[j+1])
21 {
22 temp=a[j];
23 a[j]=a[j+1];
24 a[j+1]=temp;
25 }
26 }
27 }
28 }
29
30 }
运行结果: [1, 2, 3, 4, 5, 6, 9, 13, 23]
3、二分法查找
二分法查找前提必须是有序的(升序或降序)
1 package array;
2
3 import java.util.Arrays;
4
5 /**
6 * 二分法查找
7 * @author acer
8 *
9 */
10 public class binarysearch {
11 public static void main(String[] args)
12 {
13 int searchmath=65;//查找的数
14 int[] a={56,100,23,42,37,120,12,80,94,65,76};
15 System.out.printf("普通查找%d的循环次数%d\n",searchmath,generalLoop(a,searchmath));
16 System.out.printf("二分查找%d的循环次数%d",searchmath,binarySearch(a,searchmath));
17 }
18 public static int generalLoop(int[] a,int searchmath)
19 {
20 int i;
21 int searchcount=0;
22 for(i=0;i<a.length;i++)
23 {
24 searchcount++;
25 if(a[i]==searchmath)
26 break;
27 }
28 return searchcount;
29 }
30 public static int binarySearch(int[] a,int searchmath)
31 {
32 Arrays.sort(a);//首先对数组进行排序
33 System.out.println("数组已排序");
34 int i=0;
35 int index=0;
36 int start=0;//开始位置
37 int end=a.length-1;//结束位置
38 int searchcount=0;
39 for(i=0;i<a.length;i++)
40 {
41 searchcount++;
42 index=(start+end)/2;
43 if(a[index]<searchmath)
44 {
45 start=index;
46 }
47 else if(a[index]>searchmath)
48 {
49 end=index;
50 }
51 else
52 {
53 break;
54 }
55 }
56 return searchcount;
57 }
58 }
运行结果:
普通查找65的循环次数10
数组已排序
二分查找65的循环次数1
java开始到熟悉62,码迷,mamicode.com
时间: 2024-10-15 12:01:10