增加数据插入与二分查找法:
/** * @描述 数组的操作 * @项目名称 Java_DataStruct * @包名 com.java.array * @类名 ArrayDemo * @author chenlin * @date 2010年5月22日 下午3:45:49 * @version 1.0 */
public class ArrayDemo2 {
private int[] arr;
private int len;
public ArrayDemo2(int max) {
arr = new int[max];
}
/** * 初始化 */
public void init(int value) {
arr[len] = value;
len++;
}
/** * 在有顺序的数组插入 */
public void insert(int value) {
int j;
for (j = 0; j < len; j++) {
if (arr[j] > value) {
break;
}
}
for (int i = len; i > j; i--) {
arr[i]=arr[i-1];
}
arr[j] = value;
len ++;
}
/** * 列出 */
public void list() {
for (int i = 0; i < len; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
/** * 查找 * * @param value */
public int search(int value) {
int i;
for (i = 0; i < len; i++) {
if (arr[i] == value) {
break;
}
}
if (i == len) {
return -1;
} else {
return i;
}
}
/** * 使用二分查找法 * @param key */
public int binarySearch(int key){
int min = 0;
int max = len;
int index = 0;
while(true){
index = (min + max)/2;
if (arr[index] == key) {
return index;
}else if (min > max) {
return -1;
}else {
if (arr[index] > key) {
max = index - 1;
}else {
min = index + 1;
}
}
}
}
/** * 删除 * * @param key */
public void delete(int key) {
if (search(key) == -1) {
System.out.println("not found");
} else {
for (int i = search(key); i < len; i++) {
arr[i] = arr[i + 1];
}
}
len --;
list();
}
/** * 修改 * * @param lastData * @param newData */
public void edit(int value, int newValue) {
if (search(value) == -1) {
System.out.println("not found");
} else {
arr[search(value)] = newValue;
}
list();
}
public static void main(String[] args) {
ArrayDemo2 demo = new ArrayDemo2(20);
for (int i = 0; i < 10; i++) {
demo.init(i*i);
}
demo.insert(70);
demo.list();
System.out.println("result1 = " + demo.search(-1));
System.out.println("result2 = " + demo.binarySearch(70));
demo.delete(25);
demo.edit(81,200);
}
}