数据结构回顾版-java数据结构-有序数组和查找算法
2009-02-15 19:47
344 查看
参考教材:
http://www.ibeifeng.com/thread-htm-fid-297.html
一共12讲
第二讲:有序数组和查找算法
package ch01; public class MyOrderedArray { // 数组 private long[] arr; // 数组中有效数据的大小 private int elems; //默认构造函数 public MyOrderedArray() { arr = new long[50]; } public MyOrderedArray(int max) { arr = new long[max]; } //插入数据-无序数组是直接在数组末尾插入 public void insertNoorder(long value){ arr[elems] = value; elems ++ ; } // 插入数据-有序数组是要比较后再插入,先找到插入点,把插入值放在插入点,然后把插入点后面值的后移 public void insert(long value) { int i; for (i = 0; i < elems; i++) { if(arr[i] > value) { break; } } for(int j = elems; j > i;j--){ arr[j] = arr[j - 1]; } arr[i] = value; elems++; } // 显示数据 public void display() { for (int i = 0; i < elems; i++) { System.out.print(arr[i] + " "); } System.out.println(); } // 查找数据-线性查找,一个一个挨着找 public int find(long searchKey) { int i; for (i = 0; i < elems; i++) { if (arr[i] == searchKey) { break; } } if (i == arr.length) { return -1; } else { return i; } } // 二分法查找 public int binaryFind(long searchKey) { int ins = 0; int low = 0; int pow = elems; while(true) { ins = (low + pow) / 2; if(arr[ins] == searchKey) { return ins; } else if(low > pow){ return -1; } else { if (arr[ins] > searchKey) { //上界下移 pow = ins - 1; } else { //下界上移 low = ins + 1; } } } } // 删除数据 public void delete(long deleteKey) { if (find(deleteKey) == -1) { System.out.println("查找不到指定数据,删除失败"); } else { for(int i = find(deleteKey);i < elems; i++) { arr[i] = arr[i + 1]; } } } // 修改数据 public void change(long oddValue, long newValue) { if(find(oddValue) == -1) { System.out.println("查找不到指定数据,修改失败"); } else { arr[find(oddValue)] = newValue; } } }
package ch01; public class TestMyOrderedArray { public static void main(String[] args) { MyOrderedArray moa = new MyOrderedArray(); moa.insert(1); moa.insert(787); moa.insert(123); moa.insert(45); moa.insert(4); moa.display(); System.out.println(moa.find(123)); System.out.println(moa.binaryFind(123)); } }
相关文章推荐
- java数据结构-有序数组
- 数据结构回顾版-java数据结构-数组
- Java 数据结构之有序数组,二分查找法
- 【数据结构】将有序数组转为二叉搜索树
- 两个有序数组的合并排序,Java代码实现,并去重复,考虑空间利用率问题
- 数据结构回顾版-java数据结构-存储对象
- java数据结构-链表实现堆栈 控制插入的方式,成为有序链表
- 将两个有序数组归并为一个升序数组-Java实现
- 数据结构(java语言描述)——串数组(n阶魔方)
- 【Java笔试题】合并有序数组
- java二分法实现在有序的数组中定位某数在数组中的位置
- java数据结构与算法-有序数组二分查找
- Java数据结构之数组_动力节点Java学院整理
- java实现数据结构-数组中按次数进行循环右移
- 微软等数据结构+算法面试100题(5)--怎样编写一个程序,把一个有序整数数组放到二叉树中
- 15、合并两个有序数组,不另外开辟空间 JAVA
- java 数据结构实现数组封装 (一)
- LeetCode108_Convert SortedArray to BinarySearchTree(将有序数组转成二叉排序树) Java题解
- (旋转数组问题)给定一个整数类型的循环有序数组,求循环数组的特定值,使用二分查找法(JAVA实现)
- (Java) LeetCode 540. Single Element in a Sorted Array —— 有序数组中的单一元素