Java 数据结构之数组的操作二:数据插入与二分查找法

时间:2021-03-01 22:12:28

增加数据插入与二分查找法:

/** * @描述 数组的操作 * @项目名称 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++) {
            //从这里可以获得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);
    }
}