Day13认识Java排序算法

排序

上午:

数组排序:把数组中的元素,通过比较移位替换,使之变成一个有序序列

排序方式:冒泡排序,选择排序,插入排序,希尔排序,快速排序,基数排序,堆排序,归并排序

冒泡排序:数组元素两两比较,大的往后放,经过一轮比较后,最大的元素出现在最后面,如此往复,那么整个数组就有序了

public class Demo1 {
    public static void main(String[] args) {
        int[] arr={24,69,80,57,13};
    for(int j=0;j<arr.length-1;j++){
        for (int i = 0; i < arr.length-1-j; i++) {
            if(arr[i]>arr[i+1]){
                int t=arr[i];
                arr[i]=arr[i+1];
                arr[i+1]=t;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

——tips:快速把一坨代码,抽到方法中Ctrl+alt+M

选择排序:每次拿一个元素和后面所有元素挨个比价,小的往前放,经过一轮比较,最小的元素会出现在最前面

public class Demo2 {
    public static void main(String[] args) {
        int[] arr= {24,69,80,57,13};
        for(int index=0;index<arr.length-1;index++){
        for (int i = 1+index; i < arr.length; i++) {
            if(arr[index]>arr[i]){
                int t=arr[index];
                arr[index]=arr[i];
                arr[i]=t;
            }
        }}
        System.out.println(Arrays.toString(arr));
    }
}

直接插入排序:每次将后面一个元素插入到之前的一个有序序列中,使之仍保持有序

public class Demo3 {
    public static void main(String[] args) {
        int[] arr={49,38,65,97,76,13,27};

        for (int i = 0; i < arr.length; i++) {
            int j=i;
            while(j>0&&arr[j]<arr[j-1]){//j>0是不让它低过数组的索引
                int t=arr[j];          //交换位置
                arr[j]=arr[j-1];
                arr[j-1]=t;
                j--;            //将数组前面的元素也顺序排序
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

快速排序:比大小,再分区

public class QuickSort {
    //start 默认是0
    //end 是数组长度-1
    public void quickSort(int[] arr, int start, int end) {
        if (start < end) {
            //获取分区索引
            int index = getIndex(arr, start, end);
            //对左右两个分区 再进行同样的步骤 ,即是递归调用
            quickSort(arr, start, index - 1);//左半部分
            quickSort(arr, index + 1, end);//右半部分
        }
    }

    private int getIndex(int[] arr, int start, int end) {
        int i = start;
        int j = end;
        //定义基准数
        int x = arr[i];
        //循环
        while (i < j) {
            //从右往左比较
            while (i < j && arr[j] >= x) {
                j--;
            }
            //从右往左找到比基准数小的数了后,填坑
            if (i < j) {
                //把这个数填到上一个坑位
                arr[i] = arr[j];
                //让 i++;
                i++;

            }

            //从左往右找
            while (i < j && arr[i] < x) {
                i++;
            }
            // 找比基准数大的数,找到后填坑
            if (i < j) {
                arr[j] = arr[i];
                j--;
            }
        }
        //当上面的循环结束后把基准数填到最后一个坑位,也就一基准数为界,分成了左右两部分
        arr[i] = x; //把基准数填进去
        return i; //返回基准数所在位置的索引
    }
}

查找思想:二分查找;每次查找一半(**前提:**数组元素必须有序)

根据元素,查询该元素,第一次在数组中出现的索引

——基本查找:int index =getIndex(arr,2)

getIndex(int[] arr,int ele){
	for(int j=0;j<arr.length;j++){
		if(arr[j]==ele){return j;
		}
	}
}

——二分查找:每次去找中间索引所对应的元素

中间索引centerIndex=(minIndex+maxIndex)/2

maxIndex=arr.length-1

1、找的元素正好等于中间索引对应的元素,就返回中间索引

2、找的元素比中间索引对应的元素大,minIndex=centerIndex+1;

3、找的元素比中间索引对应的元素小,

maxIndex=centerIndex-1;

public class Demo5 {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30, 40, 50, 60, 70, 80, 90, 400, 500};
        int index = getIndex(arr, 70);
        System.out.println("索引是" + index);
    }

    private static int getIndex(int[] arr, int ele) {
        int minIndex=0;//定义三个索引
        int maxIndex=arr.length-1;
        int centerIndex=(minIndex+maxIndex)/2;
        while(minIndex<=maxIndex){
            if(ele==arr[centerIndex]){
                return centerIndex;
            }else if(ele>arr[centerIndex]){
                minIndex=centerIndex+1;
            }else{
                maxIndex=centerIndex-1;
            }
            centerIndex=(minIndex+maxIndex)/2;//重新计算中间索引
        }
        return -1;
    }
}

下午:

Java针对数组的操作,给我们提供了一个工具类Arrays

此类包含用来操作数组(如排序、搜索)的各种方法

——打印数组元素:Arrays.toString(arr).sout

——判断2个数组是否相等 .equals()

——复制指定数组,截取或用0补充,长度为指定长度:.copyOf(arr,arr.length)

——复制数组指定索引范围到新数组中:.copyOfRang(arr,0,3) tips:含头不含尾

包装类

int 4个字节 -231~231

Java为了方便去操作这些基本类型数据,那么针对每个基本数据类型都提供了它所对应的包装类(引用类型)

byte——Byte

short——Short

int——Integer

long——Long

float——Float

double——Double

char——Character

boolean——Boolean

基本类型——包装类型

Integer 构造方法:

Integer(int value);把基本类型包装成所对应的包装类

‘Integer(String s):只能给字面上是数字的字符串,如 :“1234”

String类型与int类型相互转换:

int-----》String

方式1:拼接空串String str=num+"";

方式2:String中静态方法valueOf(num)可以把多种类型转换成字符串

String s=String.valueOf(num);

方式3:Integer Integer=new Integer(num);

string String=integer.toString();

String—》int

方式1:new Integer(StrNUm);

int i = integer.inValue();

方式2:int num=Integer.parseInt(Strnum);

自动装箱/开箱

自动装箱:将基本类型自动转换成它所对应的包装类型

自动拆箱:将包装类型自动转换成它所对应的基本类型

如:

Integer integer=new Integer(20);

Integer integer2=new Integer(200);

int num =integer+integer2;//自动拆箱

int a=200;

Integer integer1=a;//自动装箱

————补充:

知识点:

//超过1个字节的范围

Integer i5 = 128;
	Integer i6 = 128;
	System.out.println(i5 == i6);//false  原因就是128大于了1字节
	System.out.println(i5.equals(i6));//true
	System.out.println("-----------");
	
Integer i7 = 127;
Integer i8 = 127;
System.out.println(i7 == i8);//true
System.out.println(i7.equals(i8));//true

//Integer i7=127;自动装箱 底层要调用

维护了一个数组缓存,IntegerCache里面存储了new Integer()对象,若取数组中的对象,地址值就是一样的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
水资源是人类社会的宝贵财富,在生活、工农业生产中是不可缺少的。随着世界人口的增长及工农业生产的发展,需水量也在日益增长,水已经变得比以往任何时候都要珍贵。但是,由于人类的生产和生活,导致水体的污染,水质恶化,使有限的水资源更加紧张。长期以来,油类物质(石油类物质和动植物油)一直是水和土壤中的重要污染源。它不仅对人的身体健康带来极大危害,而且使水质恶化,严重破坏水体生态平衡。因此各国都加强了油类物质对水体和土壤的污染的治理。对于水中油含量的检测,我国处于落后阶段,与国际先进水平存在差距,所以难以满足当今技术水平的要求。为了取得具有代表性的正确数据,使分析数据具有与现代测试技术水平相应的准确性和先进性,不断提高分析成果的可比性和应用效果,检测的方法和仪器是非常重要的。只有保证了这两方面才能保证快速和准确地测量出水中油类污染物含量,以达到保护和治理水污染的目的。开展水中油污染检测方法、技术和检测设备的研究,是提高水污染检测的一条重要措施。通过本课题的研究,探索出一套适合我国国情的水质污染现场检测技术和检测设备,具有广泛的应用前景和科学研究价值。 本课题针对我国水体的油污染,探索一套检测油污染的可行方案和方法,利用非分散红外光度法技术,开发研制具有自主知识产权的适合国情的适于野外便携式的测油仪。利用此仪器,可以检测出被测水样中亚甲基、甲基物质和动植物油脂的污染物含量,为我国众多的环境检测站点监测水体的油污染状况提供依据。
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值