数组特点:
1、大小固定
2、同一数据类型
3、下标访问
4、数据项可重复
Java数据类型:基本类型(int和double)和对象类型。在许多编程语言中,数组也是基本类型。但在Java中把它们当作对象来对待,因此在创建数组时必须使用new操作符。
有序数组与无序数组比较:最主要的好处是查找速度比无序数组快多了。不好的方面是在插入操作中由于所有靠后的数据都需要移动以疼开空间,所以速度较慢。有序数组和无序数组数据中的删除操作都很慢,这是因为数据项必须向前移动来填补已删除数据项的空洞。
数据访问:从下标访问,可以理解为位置访问,这一点主要说明与链表的关系访问的不同。
数组中有无重复值对数组操作的影响:
二分查找和线性查找:
线性查找。
在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。
如果查找池是某种类型的表,比如一个数组,简单的查找方法是从表头开始,一次将每一个值与目标元素相比较,最后,或者查找到目标,或者达到表尾,而目标不存在于组中,这个方法成为线性查找。
线性查找又称为顺序查找。
public class LSearch { public static int[] Data = { 12, 76, 29, 22, 15, 62, 29, 58, 35, 67, 58, 33, 28, 89, 90, 28, 64, 48, 20, 77 }; // 输入数据数组 public static int Counter = 1; // 查找次数计数变量 public static void main(String args[]) { int KeyValue = 22; // 调用线性查找 if (Linear_Search((int) KeyValue)) { // 输出查找次数 System.out.println(""); System.out.println("Search Time = " + (int) Counter); } else { // 输出没有找到数据 System.out.println(""); System.out.println("No Found!!"); } } public static boolean Linear_Search(int Key) { int i; // 数据索引计数变量 for (i = 0; i < 20; i++) { // 输出数据 System.out.print("[" + (int) Data[i] + "]"); // 查找到数据时 if ((int) Key == (int) Data[i]) return true; // 传回true Counter++; // 计数器递增 } return false; // 传回false } }
二分查找(折半查找)。
几个特点:
1、必须采用顺序存储结构
2、必须按关键字大小有序排列
3、数据量越大,效率体现的越明显
/** * 二分查找法 demo */ public int find(){ a [0] = 22; a [1] = 33; a [2] = 88; a [3] = 43; a [4] = 74; a [5] = 34; a [6] =63; a [7] = 32; a [8] = 26; a [9] = 92; int lowerBound = 0; int upperBound = 9; int curIn = 0; long searchKey = 63; while (true) { curIn = (lowerBound+upperBound)/2; if (a[curIn]==searchKey) { return curIn; } else if (lowerBound>upperBound) { return 10; }else { if (a[curIn]<searchKey) { lowerBound = curIn+1; }else { upperBound = curIn-1; } } } }大O表示法
汽车按尺寸被分为若干类,微型、中型、大型等等。同样,我们也需要一个快捷的方法来评价计算机算法的效率,在计算机科学中,这种粗略的度量方法被称作“大O”表示法。