java数据结构系列——排列(2):有序阵列
package Array; /**
* 对数组排序。当添加到阵列保持有序数组元素;
* @author wl
*
*/
public class MyOrderArray {
private long array[];
private int elements;//用于记录数组中实际数据的个数 public MyOrderArray(){
array=new long[50];//数组默认长度为50;
} public MyOrderArray(int capacity){//设置数组的默认长度
array=new long[capacity];
} /**
* 向数组中插入元素,并维护数组中元素的有序性
*/
public void add(long data){
if(elements>array.length-1){
throw new ArrayIndexOutOfBoundsException();
} int i;
for(i=0;i<elements;i++){
if(array[i]>data){
break;
}
} for(int j=elements;j>i;j--){
array[j]=array[j-1];
}
array[i]=data;
elements++;
} /**
* 删除index处的元素
* @param index
*/
public void delete(int index){
if(index>=array.length||index<0){
throw new IndexOutOfBoundsException();
}
for(int i=index;i<=elements;i++){
array[i]=array[i+1];
}
elements--;
} /**
* 删除元素data
* @param data
*/
public void delete(long data){
int addr=search(data);
if(addr==-1){
System.out.println(data+"不存在");
}else{
for(int i=addr;i<=elements;i++){
array[i]=array[i+1];
}
elements--;
}
} /**
* 用二分查找(折半查找)法查找数组中data的下标位置
* @param data
* @return
*/
public int binarySearch(long data){
int low,high,mid; low=0;
high=elements; while(low<=high){
mid=low+(high-low)/2; if(data<array[mid]){
high=mid-1;
}else if(data>array[mid]){
low=mid+1;
}else{
return mid;
}
}
return -1;
}
/**
* 查找index处的元素
* @param index
* @return
*/
public long search(int index){
if(index>=array.length||index<0){
throw new IndexOutOfBoundsException();
}
return array[index];
} /**
* 查找array中data值所在下标
* @param data
* @return
*/
public int search(long data){
int i;
for(i=0;i<=elements;i++){
if(array[i]==data){
return i;
}
}
return -1;
} /**
* 打印数组中的内容
*/
public void display(){
System.out.print("[");
for(int i=0;i<elements-1;i++){
System.out.print(array[i]+",");
}
System.out.print(array[elements-1]);
System.out.println("]");
}
}
java数据结构系列——排列(2):有序阵列的更多相关文章
- JAVA数据结构系列 栈
java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...
- Java数据结构系列之——栈(2):栈的链式存储结构及其操作
package Stack; import LinkList.SinglyLinkList; public class LinkListStack { private SinglyLinkList&l ...
- java数据结构系列之——数组(1)
import javax.management.RuntimeErrorException; public class MyArray { private long array[]; private ...
- Java数据结构系列——简单排序:泡、选择、直接进入
package SimpleSort; public class SimpleSort { /** * 冒泡排序:每次循环过程中.小的排在后面的数会像水中的 * 气泡一样慢慢往上冒,所以命名为冒泡排序 ...
- Java数据结构系列(1)——自平衡二叉树
1.基本概念 所谓自平衡二叉树,就是当我们插入或删除元素之后,二叉树的高度会自动调整到最小,这样我们就可以在对数时间内查找二叉树内的元素. 2.定义 TreeSet<Elemtype> s ...
- 自己动手实现java数据结构(一) 向量
1.向量介绍 计算机程序主要运行在内存中,而内存在逻辑上可以被看做是连续的地址.为了充分利用这一特性,在主流的编程语言中都存在一种底层的被称为数组(Array)的数据结构与之对应.在使用数组时需要事先 ...
- 《java数据结构与算法》系列之“开篇”
大学的时候学习数据结构,当时吧虽然没挂这门课,但是确实学的不咋地,再但是其实自己一直都觉得数据结构很重要,是基础,只有基础好了,后面的路才能走的更好. 懒惰真的是天下的罪恶之源.所以一直到现在都毕业了 ...
- Java 集合系列 17 TreeSet
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java 集合系列 12 TreeMap
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
随机推荐
- [C++]四种方式求解最大子序列求和问题
问题 给定整数: A1,A2,-,An,求∑jk=iAk 的最大值(为方便起见,假设全部的整数均为负数,则最大子序列和为0) 比如 对于输入:-2,11,-4,13,-5,-2,答案为20,即从A2到 ...
- hdu2993坡dp+二进制搜索
MAX Average Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- WPF中两条路径渐变的探讨
原文:WPF中两条路径渐变的探讨 我们在WPF中,偶尔也会涉及到两条路径作一些“路径渐变 ”.先看看比较简单的情形:如下图(关键点用红色圆点加以标识):(图1) 上面图1中的第1幅图可以说是最简单的路 ...
- c++ primer 函数传值1
不看c++ primer 永远不知道自己基础有多差 函数的參数传值一般有两种方式:值传递,引用传递. 值传递有以下两种形式: void func( int a ) { // } void func1 ...
- Highcharts中文教程
http://www.hcharts.cn/docs/index.php?doc=start
- java提高篇(三)-----理解java的三大特性之多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- 采用ToolRunner执行Hadoop基本面分析程序
为了简化执行作业的命令行.Hadoop它配备了一些辅助类.GenericOptionsParser它是一类.经常用来解释Hadoop命令行选项,并根据需要.至Configuration采取相应的对象设 ...
- Apple Watch 1.0 开发介绍 1.3 简介 WatchKit App 架构
WatchKit app和WatchKit extension一起实现了app的界面.当用户在Apple Watch中操作时,WatchKit app从storyboards中选择合适的场景.比如,如 ...
- 房费制 之 登录BUG
声明:以下内容只有当你登录到一个username同时,学生不能申请多次登录. 说是BUG,事实上这也不是一个BUG,仅仅是想出一个办法,解决一个大家好多人都没有解决的问题.以下就给大家 ...
- 栈上分配存储器的方法 alloca 抽样
声明一个局部变量,必须分配在堆栈上,但有或没有它的方法 当然,,那是 alloca 下面的代码显示了可变长度参数转换,alloca 要使用 int main(int argc, char ** arg ...