八、遍历的应用+增删改查

1 最值:max、min

注意:

定义的max或min不能是0,因为数组中可能会有负数,应该定义为第一个元素arr[0]
int[] arr={-8,-4,0,8,5,2};    //最大值 
int max=arr[0];    //不能是0 
for (int i = 1; i < arr.length; i++) { 
    if (max<arr[i]){ 
        max=arr[i]; 
    } 
} 
System.out.println("最大值为"+max);    //最小值 
int min=arr[0];    //不能是0 
for (int i = 1; i < arr.length; i++) { 
    if (min>arr[i]){ 
        min=arr[i];
    } 
} 
System.out.println("最小值为"+min);

2 找指定元素

Scanner sc=new Scanner(System.in); ​ 
System.out.print("请输入一个整数:"); ​ 
int num=sc.nextInt(); ​ 
int index=-1;    //不能是0 ​ 
for (int i = 0; i < arr.length; i++) { ​ 
    if (num==arr[i]){ ​ 
        index=i; ​ 
    } ​ 
} ​ 
System.out.print((index == -1) ?(num + "不存在"):(num + "存在,且下标为" + index));

3 冒泡排序:升序、降序

int[] arr={3,-5,0,9,7,-11};

for (int i = 0; i < arr.length-1; i++) { ​ 
    for (int j = 0; j < arr.length-1-i; j++) { ​ 
        if (arr[j]>arr[j+1]){    //升序 ​ 
            int temp=arr[j]; ​ 
            arr[j]=arr[j+1]; ​ 
            arr[j+1]=temp; ​ 
        } ​ 
    } ​ 
} ​ 
System.out.println(Arrays.toString(arr));

for (int i = 0; i < arr.length-1; i++) {
    for (int j = 0; j < arr.length-1-i; j++) {
        if (arr[j]<arr[j+1]){    //降序
            int temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;
        }
    }
}

4 函数升序、降序

//降序:升序后倒序 
int[] arr={-2,-9,9,7,0,2,-18}; 
Arrays.sort(arr);    //升序 
int num=arr[0];    //倒序 
for (int i = 1; i < arr.length; i++) { 
    if (num>arr[i]){ 
        int temp=arr[i]; 
        arr[i]=arr[i+1]; 
        arr[i+1]=arr[i]; 
    } 
} 
System.out.print(Arrays.toString(arr));

5 增删改查

5.1 增:必须是有序数组,插入后新数组长度=源数组长度+1

String[] names={"aa","bb","cc"}; 
System.out.println("修改前:"+ Arrays.toString(names)); 
Scanner sc=new Scanner(System.in); 
System.out.print("请输入你要修改的元素:"); 
String update=sc.next();    
//先查找是否存在,返回下标 
int index=-1; 
for (int i = 0; i < names.length; i++) { 
    if (update.equalsIgnoreCase(names[i])){ //存在 
        index=i; 
        break; 
    } 
} 
//根据下标进行更改 
if (index!=-1){ 
    System.out.print("请选择是否执行修改操作?(y/n)"); 
    String flag=sc.next(); 
    if (flag.equalsIgnoreCase("y")){ 
        //执行修改操作 
        System.out.print("请输入修改后的内容:"); 
        String updateAfter=sc.next(); 
        names[index]=updateAfter; 
        System.out.print("修改后的数组为:"+Arrays.toString(names)); 
    }else{ 
        System.out.print("修改操作已撤销!"); 
    }

}else {

    System.out.print("需要修改的元素不存在"); ​ }

sc.close();

5.2 删:被删除的元素一定要存在,删除后新数组长度=源数组长度-1

String[] names={"aa","cc","dd","bb","ff"}; 
System.out.println("删除前的数组是:"+ Arrays.toString(names));    //输入要删除的元素 
Scanner sc=new Scanner(System.in); 
System.out.print("请输入要删除的元素:"); 
String del= sc.next();    //要删除的元素是否存在,先假设不存在,存在返回元素下标 
int index=-1; 
for (int i = 0; i < names.length; i++) { 
    if (del.equalsIgnoreCase(names[i])){ 
        index=i; break; 
    } 
} 
if (index!=-1){ 
    System.out.print("是否删除?(y/n)"); 
    String flag=sc.next(); 
    if(flag.equalsIgnoreCase("n")){ 
        System.out.println("撤销删除操作"); 
    }else { 
        //创建删除后的新数组 
        String[] newNames=new String[names.length-1]; 
        for (int i = 0; i < newNames.length; i++) { 
            if (i<index){ 
                //要删除元素之前的元素正常赋值 
                newNames[i]=names[i]; 
            }else { 
                //要删除元素的元素不赋值 
                newNames[i]=names[i+1]; 
            } 
        } 
        System.out.print("删除后的数组是:"+Arrays.toString(newNames)); 
    } 
}else{ 
    System.out.print("要删除的元素不存在"); 
    } 
sc.close();

5.3 改:要修改的元素必须存在

//插入元素 
int[] arr={3,-5,0,9,7,-11}; 
System.out.println("插入前的数组为:"+ Arrays.toString(arr)); //排序 
Arrays.sort(arr); 
Scanner sc=new Scanner(System.in); 
System.out.print("请输入要插入的元素:"); 
int num=sc.nextInt(); 
int index=0;    //假设要插入的位置是0 
for (int i = 0; i < num; i++) { 
    //判断第一次比插入元素大的元素 
    if (num<arr[i]){ 
        index=i; break; 
    }else{ 
        //插入的元素比数组里的元素都大 
        index=arr.length; 
    } 
} 

int[] newArr=new int[arr.length+1];    //创建新数组,长度为源数组长度+1 
//遍历新数组,将源数据和插入的元素复制到新数组中 
for (int i = 0; i < newArr.length; i++) { 
    if (i==index){ 
        newArr[i]=num; 
    }else if(i<index){ 
        newArr[i]=arr[i]; 
    }else{ 
        newArr[i]=arr[i-1]; 
    } 
} 
System.out.print("插入后的数组为:"+Arrays.toString(newArr));

5.4 折半查找 (二分法查找):必须是对有序数据进行折半

原理 : 对指定的数组 重复多次进行折半 ,用指定位置上的数据与折点位置上的数据进行比较

//1.折半查找,先升序 
Arrays.sort(arr); 
//2.输入要查找的数字 
Scanner sc=new Scanner(System.in); 
System.out.print("请输入要查找的数字:"); 
int num=sc.nextInt(); 
int index=-1;//假设不存在,下标为-1 
int begin=0; int end=arr.length-1;//最大下标 
//重复多次对数组进行折半查找,不知循环次数用while
while (begin<=end){ 
    int middle=(begin+end)/2;
    //折点位置 
    //输入的数与折点位置上的数 
    if (num==arr[middle]){ 
        //将折点的位置赋值给index index=middle; 
        break;//已经找到 
    }else if (num>arr[middle]){ 
        //输入数比折点大,在右侧,更改开始位置 
        begin=middle+1; 
    }else{ 
        //输入数比折点小,在左侧,更改结尾位置 
        end=middle-1; 
    } 
} 
System.out.print((index==-1)?"元素不存在":"元素存在"); 
sc.close();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L-Q-W

您的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值