(说明:昨天网络出现了问题导致昨天的没有按时上传,这篇算是昨天的,今天晚上照常上传今天的内容)
本次主题:数组拷贝、排序、二分法
1、数组拷贝
a.java.lang中System
类包含一些有用的类字段和方法。它不能被实例化。
在 System
类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。
public static void arraycopy( src, int srcPos, dest, int destPos, int length)
- 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从
src
引用的源数组到dest
引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于length
参数。源数组中位置在srcPos
到srcPos+length-1
之间的组件被分别复制到目标数组中的destPos
到destPos+length-1
位置。
b.java.util中的Arrays类,此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。
toString
public static 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 }
运行结果:
[I@19836ed[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;ia[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;isearchmath)48 {49 end=index;50 }51 else52 {53 break;54 }55 }56 return searchcount;57 }58 }
运行结果:
普通查找65的循环次数10
数组已排序二分查找65的循环次数1