初学Java基础Day11--eclipse的使用,数组的查找,复制,冒泡排序

一,eclipse的使用

窗口:Window---Show view

字体:Window---Preference---搜索font---colors and font---basic---最后一项 Test font

二,冒泡排序

1.原理:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

  3. 针对所有的元素重复以上的步骤,除了最后一个。

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 。

2.代码实现

public class Test01 {
	public static void main(String[] args) {
		
		int[] arr = {5, 8, 6, 3, 9, 2, 1, 7};
		
		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;
                    
                    //通过两个变量加减实现两个变量的交换
                    //缺点:当两个变量相加超出int取值范围,会损失精度
					//arr[j] = arr[j] + arr[j+1] - (arr[j+1] = arr[j]);
					
					//通过位运算^异或实现两个变量的交换
					arr[j] = arr[j]^arr[j+1];
					arr[j+1] = arr[j]^arr[j+1];
					arr[j] = arr[j]^arr[j+1];
				}
			}
		}
		
		System.out.println(Arrays.toString(arr));
	}
}

3.口诀

N个数字来排队

两两相比小靠前

外层循环N-1

内层循环N-1-i

4,优化代码

为什么需要优化?

针对不同的数列,需要循环的轮数是有不同的。

例如:54321需要4轮循环之后才能排好序。而12345,当执行第一轮循环后,所有相邻的两个数值都无需换位,那说明排序正常,无需排序。不用执行后续的循环。

public class Test02 {
	
	public static void main(String[] args) {
		
		int[] arr = {5, 8, 6, 3, 9, 2, 1, 7};
		
		for (int i = 0; i < arr.length-1; i++) {
			//默认排好了
			boolean isSort = true;
			
			for (int j = 0; j < arr.length-1-i; j++) {
				if(arr[j] > arr[j+1]){
					
					isSort = false;
					
					arr[j] = arr[j]^arr[j+1];
					arr[j+1] = arr[j]^arr[j+1];
					arr[j] = arr[j]^arr[j+1];
				}
			}
			//排好了跳出循环
			if(isSort){
				break;
			}
		}
		
		System.out.println(Arrays.toString(arr));
	}
}

三,数组的查找

1.线性查找

//案例:
int[] arr ={1,55,81,32,68,50,33};
int num =81;//需要查找的元素
for(int i=0;i<arr.length-1;i++){
    if(num==arr[i]){

        System.out.println("找到该元素了下标为:"+i);
        break;
    }
}

2.二分法查找

前提:一定先排序,再查找!!!!!

import java.util.Arrays;
public class Test01{
    public static void main(String[] args){
        
        int[] arr = {6,23,7,35,8,24};
       
        //排序
        Arrays.sort(arr);
         int num =81;//需要查找的元素
        
        int start =0;
        int end = arr.length-1;
        while(start <=end){
            int mid = (start+end)/2;
            if(num>arr[mid]){
                start =mid+1;
            }else if(num<arr[mid]){
                end  =mid-1;
            }else{
                System.out.println("找到该元素了,下标为:"+mid);
                break;
            }
            
        }
        
    }
}

四,数组的复制

第一种

String[] names = {"周杰伦";"陈奕迅";"林俊杰";"杨千嬅","王力宏"};

//新数组
String[] newNames =names;
//改变源数组的数据
names[1] ="马思唯";
//遍历新数组
for(String element : arr){
    System.out.println(element);
}
//注意:复制后,改变源数组,新数组里的数据也会发生改变

第二种

//源数组
String[] names = {"周杰伦";"陈奕迅";"林俊杰";"杨千嬅","王力宏"};

//新数组
String[] newNames =new String[names.length];
//遍历源数组,将元素赋值给新数组
for(int i =0;i<names.length;i++){
    newNames[i] =names[i];
}
//改变源数组的数据
names[1] ="马思唯";
//遍历新数组
for(String element : arr){
    System.out.println(element);
}
//此时,改变源数组,新数组里面的数据也不会发生改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值