《数据结构与算法》学习笔记3 有序数组与二分查找

本文介绍了一个简单的有序数组类OrdArray的实现,包括插入、查找和删除元素等基本操作。通过具体的示例展示了如何使用该类进行数组元素的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

</pre><pre code_snippet_id="1836872" snippet_file_name="blog_20160817_2_9019752" name="code" class="java">//import java.lang.math.*;
public class OrdArray {
  private long[] a;
  private int size;
  public OrdArray(int value){
	  a=new long[value];
	  size=0;
  }
  
  public void insert(long value){
	int i;
	for(i=0;i<size;i++) 
		if(value<a[i]) break;
	for(int j=size;j>i;j--)
	    a[j]=a[j-1];
	a[i]=value;
	size++;
  }
  public int find(long value){
	int i=size-1;
	int j=0;
	int k;
	int num=(int) (Math.log(i+1)/Math.log(2));
	for(k=0;k<num;k++) {   //找到value
	if(a[i]==value) {k=i;break;}
	else if(a[j]==value) {k=j;break;}
	else if(a[i/2]<value)  j=i/2;
	else if(a[i/2]>value)  i=i/2;
	else { k=i/2;break;}  
	}
	if(a[k]!=value) System.out.println("error");
	else System.out.println("success:"+k);
	return k;
}
//  public int find(long value){
//	  int lowbound=0;
//	  int upperbound=size-1;
//	  int cut;
//	  while(true){
//		  cut=upperbound/2;
//		  if(a[cut]==value) return cut;
//		  else if(lowbound>upperbound) return size;
//		  else {
//			  if(a[cut]<value) lowbound=cut+1;
//			  else upperbound=cut-1;
//		  }
//	  }
//  }
  
  public boolean delete(long value){
	int k=find(value);
	for(int x=k;x<size-1;x++){
		a[x]=a[x+1];
	}
	size--;
	if(k<=size&&k>=0) return true;
	else return false;
}
  
  public void display(){
	  for(int i=0;i<size;i++)
	  System.out.println(a[i]);
  }
  
}
</pre><pre code_snippet_id="1836872" snippet_file_name="blog_20160817_4_8736344" name="code" class="java">
<pre name="code" class="java">public class OrdArrayApp {
 public static void main(String[] arg){
  OrdArray arr;
  arr=new OrdArray(10);
  arr.insert(12);
  arr.insert(32);
  arr.insert(3);
  arr.insert(87);
  arr.insert(23);
  arr.insert(122);
  arr.delete(122);
  arr.display();
 }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值