1 /*有序数组:主要是为了提高查找的效率
2 *查找:无序数组--顺序查找,有序数组--折半查找
3 *其中插入比无序数组慢
4 * */
5 public class MyOrderedArray {
6 private long[] arr;
7 private int items;
8
9 public MyOrderedArray(int max) {
10 arr = new long[max];
11 items = 0;
12 }
13
14 //数组中元素的个数
15 public int size(){
16 return items;
17 }
18
19 //折半查找
20 public int find(long key){
21 int low = 0;
22 int high = items - 1;
23 int mid;//变化的
24 while(low <= high){
25 mid = (low + high) / 2;
26 if(key == arr[mid]){
27 return mid;
28 }
29 else if(key > arr[mid]){
30 low = mid + 1;
31 }
32 else if(key < arr[mid]){
33 high = mid - 1;
34 }
35 }
36 return -1;
37 }
38
39 //插入元素
40 public void insert(long key){
41 int i;
42
43 for( i = 0; i < items; i++){ //先找到位置
44 if(key < arr[i]){
45 break;
46 }
47 }
48
49 for(int k = items;k>i; k--){ //移动元素
50 arr[k] = arr[k -1];
51 }
52
53 arr[i] = key;//插入元素到找到的位置
54 items++;
55 }
56
57 //删除元素--先判断找的位置合法--在判断
58 public boolean delete(long key){
59 int i = find(key);
60 if(i == items){
61 return false;
62 }
63 else{
64 for(int k = i; k < items; k++){
65 arr[k] = arr[k + 1];
66 }
67 items--;
68 return true;
69 }
70 }
71
72 public void displayArray(){
73 for(int i = 0;i < items;i++){
74 System.out.print(arr[i] + " ");
75 }
76 System.out.println();
77 }
78
79 }