有序数组的增删改查

该代码实现了一个有序数组类ArrDemo,包含添加、查找、插入、修改和删除元素的方法。使用二分查找优化了插入和删除操作,当数组满时会自动扩容。在ArrTest类中进行了测试,添加了一系列数字并展示数组内容。
摘要由CSDN通过智能技术生成
public class ArrDemo {
     private int[] arr = new int[20];
     private int flag = 0;

     public void add(int x){
          System.out.print("插入的新数据:" +x+" ");
          if(flag==arr.length){
               int[]  arrNew = new int[arr.length*2];
               for (int i = 0;i< arrNew.length;i++){
                    arrNew[i]=arr[i];
               }
               arr=arrNew;
          }
          //找到插入的正确位置
          if(flag==0){
               arr[0]=x;
               flag++;
               return;
          }
          int insertIndex=getInsertIndex(x);
          for(int i = flag;i>insertIndex;i--){
               arr[i] = arr[i-1];
          }
          flag++;
          arr[insertIndex]=x;
     }


     public int getIndex(int x){
          int left = 0;
          int right = arr.length-1;
          while (left<=right){
               int middle = (left+right)/2;
               if (arr[middle]==x){
                    return middle;
               }else if(arr[middle]<x){
                    left=middle+1;
               }else {
                    right=middle-1;
               }
          }
          return -1;
     }

     //有序数组要插入的位置
     public int getInsertIndex(int x){
          int left = 0;
          int right = flag-1;
          while (left <= right){
               int middle = (left+right)/2;
               if (arr[middle]==x){
                    return middle;
               }else if(arr[middle]<x){
                    left=middle+1;
               }else {
                    right=middle-1;
               }
          }
          int middles = (left+right)/2;  //防止右侧越界
          if(arr[middles] >= x){
               return middles;
          }else{
               return middles+1;
          }
     }

     public void change(int oldNum,int newNum){
          int index = getIndex(oldNum);
          arr[index]=newNum;
     }

     public void del(int x){
          int index = getIndex(x);
          for (int i =index;i<flag-1;i++){
               arr[i]=arr[i+1];
          }
          flag--;
     }

     public void show(){
          for (int i =0;i<flag;i++){
               System.out.print("arr["+i+"]:"+arr[i]+" ");
          }
     }

测试:

public class ArrTest {
    public static void main(String[] args) {
        ArrDemo arrDemo = new ArrDemo();
       arrDemo.add(1);arrDemo.add(8);arrDemo.add(9999);arrDemo.add(12);
        arrDemo.add(5);arrDemo.add(55);arrDemo.add(-14);arrDemo.add(666);
        System.out.println("--------------------------------");
        arrDemo.show();
    }
}


今日状态不佳,字少谅解!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值