第四天
| 001数组(常见操作) |
|
【】定义数组的两种格式 int[] arr=new int[5]; int[] arr={1,2,3,4,5};
【】角标最高位是数组长度减一(角标<arr.length),异常编译器不会发现执行时才在内存开辟空间被查出
【】arr变量值为空null,不指向数组,就会出异常
|
|
【】获取数组的元素,一般遍历获取 for循环遍历
引入数组长度来优化遍历
|
|
【】数组求和:变量+循环
|
|
【】定义功能
优化:最后一个元素后面没有逗号,则将最后一个用if语句修改并加上换行
优化,加上中括号,在最前面打印上,最后面打印上
|
|
【】直接打印数组名,打印的是数组实体的引用,是哈希算法算出来的哈希值,
【代表数组 I代表数组数据类型 @ @右侧,数组内存存放地址,是十六进制的数 |
|
【】求数组最大值:设一个变量存储,其他不断和这个存储器比较 【】获取最小值也是这个思路
【【】实质上属于片难怪写法 |
![]() |
| 002数组(排序与折半查找) |
|
【】函数里面的参数a,接受主函数传来的具体值arr,在函数里面进行运算 【】实际a也指向数组,并操作数组,所以arr指向的堆已经发生变化,无需返回值,所以方法类型void |
|
【】选择排序思想:第一个和后面的每个逐个比较,每次都是小的被互换到最前面,然后第二个和后面的比较,逐个进行 【】五个组;每个组是x驱动,系列内部为y驱动;每一位相当于行for外循环,都和后面的比较相当于for内循环的列 【】比较是和其后面的每个,所以行角标为x时,则列角标y初始值为y=x+1 【】替换replace模型:设置一个临时变量存储来辅助替换
【】x<length,就是说最后一个array【length-1】,就是每一个都依序参与比较;到这后y=x+1=length下一步下雨length而循环结束 也可以<length-1,最后一个也没有后面的元素可以比较了 【】y负责具体的比较方案
【】选择排序=逐个比较+遇小互换
|
|
【】冒泡排序
【】相邻比较+遇小互换 【】每次排序完成,最大值都排去最后一位
冒泡排序难题 1在于一共比较几组:实际上比较length-1组,所以下标从0到length-2,所以int=0;x<arr.length-1; 2在于每次比较的元素结尾在变化自减,应该是一个变量。可以单独设变量int z=1;也可以用x来替代这个变量; 【】冒泡排序可以先做出个样子,再进行优化
【】写完之后,按照流程走一遍,然后按照实际流程进行修正 |
|
【】最快的排序是希尔排序 【】排序都会有一个换位置的过程
|
![]() |
|
【】数组查找操作:遍历法 【】输出:整数型数字,输入数组名与关键数字;
也可以从后往前遍历,找最后出现的序号 |
|
【】折半查找 1就是mid通过min与max确定,之后不断收紧mid活动范围来让mid接近标的 2得出mid后如果标的比mid大,就将mid加一处变成新的min;得出mid后如果标的比mid小,就将mid减一处变成新的max 3最后min与max并列,mid将在min上,如果仍不相等,max会最后小于min,则证明标的不存在
【】变成就是将一套顺序流程用代码形式如实运转,代码运行就是重现流程运行,流程运行应该和代码运行一样 【】一套递加的数组,首先确定最大序号,最小序号,之后算出中间序号,看看中间序号的数值和目标值是否一样, 一样就结束,不一样如果目标值比中间序号大则移动min到mid右边位置如果小则,形成新min与max在算出mid,再比较目标值与mid代表值,直到找到,返回mid序号,或则最终找不到而形成min大于max情况,返回-1结束 |
![]() |
|
不是遍历插入,而是折半插入 【】查找这个值的位置,或者不存在但min
|
| 003数组(十进制与查表法) |
|
【】十进制转二进制:与操作+移位+查表法---因为十进制数字在计算机到底是二进制存储形式 【】十进制转16进制:与操作+移位+查表法 |
|
【】第一版把对2取模的数都打印出来
【】取模和除二去掉余数配合使用 【】第二版:添加一个存数据的容器,可以存储模后数据,有一个功能倒序打印,这样就能打出二进制来
|
|
【】十进制转成16进制,可以靠取模,也可以与0001111做与操作取后四位,然后转成一位十六进制,然后再右移四位,再与操作取后四位
先对数字做与操作获取后四位,再收取这四位,然后右移四位,再与操作,从这里就开始了循环,32位,循环8次 【】顺序打印
|
|
【】减十加a太麻烦,可以使用查表法 【】先把0-f元素存到表里,角标与元素有 一一对应关系,直接查表找元素
第一版:打印出16进制表达
第二版
【】新数组存储
【】遍历时逆序遍历打印,并print后去掉ln不换行
【】第三版 【】 结果顺序,但前面还有零太多余,想要去掉, 原理是最初的数字不断右移,移到剩下的全是零,就是num=0,之后不再录入即可
所以把for循环替换为while(num!=0)但此时需要有个变量来代替x,就需要重新定变量 打印的时候从尾部打印会把其余元素都打印,可以从有效部位开始打印,就是pos最后的数字处开始向前打印,那就纸打印有效位
【】第四版 打算把数组倒着存,这样二进制最后四位正好落入数组最后部分,数组存的就是正确的数值了 【】更改角标变量pos为终点值,打印时正着打印
|
|
【】查表法:十进制转为二进制
【】一旦出现return就宣告函数结束,那么循环也就结束 |
| 004进制转换和二维数表 |
| 【】十进制转化为2、16进制有共性的东西,归纳出一个方法,其他方法调用它 |
|
|
|
|
|
|
|
|
![]() |
|
二维数表就是栈内存变量arr存数组地址,指向数组;数组里面元素存储的是另一个数组的地址, arr【0】指向另一个地址的数组
|
![]() |
| 【】定义二维数组的另一方法 |
|
【】将二维数组里元素都加起来 |
![]() |

























































浙公网安备 33010602011771号