java基础学习—(5)数组的基本操作

    xiaoxiao2022-06-26  177

    数组常见操作

    对数组的最基本操作就是存和取,核心思想就是对角标的操作。

    遍历

    int[] arr = {45,56,86,2,5}; for(int x=0; x<arr.length; x++) { System.out.println("arr["+x+"]="+arr[x]); }

    1、使用循环完成遍历。 2、arr.length可获取数组的长度,需要注意的是数组最大的角标为arr.length-1。

    最值

    定义一个最值变量,遍历数组,采用逐一比较的方法,记录最大的数组变量值,或者对应角标,以便后续操作。 注意:定义的最值变量初始值应为数组中的任意值。

    public static int qmax(int[] arr) { int max = arr[0]; for(int x=0; x<arr.length; x++) { if (arr[x]>max) { max = arr[x]; } } return max; }

    排序 1、选择排序法:

    public static void paixu(int[] arr) { for(int x=0; x<arr.length-1; x++) { int k; for (int y=x;y<arr.length;y++) { if(arr[y]>arr[x]) { k=arr[x]; arr[x] = arr[y]; arr[y]=k; } } } }

    注意: 1、外层循环无需再比较,故外层循环为想x<arr.length-1;,而内层需要与最后一个比较,故内层为y<arr.length;

    2、冒泡排序法: 代码

    public static void paixu1(int[] arr) { for(int x=0; x<arr.length-1; x++) { int k; for (int y=0;y<arr.length-1-x;y++) { if(arr[y]<arr[y+1]) { k=arr[y]; arr[y] = arr[y+1]; arr[y+1]=k; } } } }

    注意: 以上排序方法,一般在面试的时候用,但是日常开发不要这么写。通常开发有java内置的函数,不过在使用该函数之前需要导入一个相应的模块。

    import java.util.*; ........ Arrays.sort(arr);

    其中,

    { k=arr[y]; arr[y] = arr[y+1]; arr[y+1]=k; }

    可以编写成一个函数,进行调用。

    public static void swap(int[] arr,int a,int b) { int k=arr[a]; arr[a] = arr[b]; arr[b]=k; }

    以上为升序排序。速度最快的排序是希尔排序,运用的是位运算。

    排序的性能问题 遍历时,记录最值和最值的角标,在遍历结束后,再进行换位。

    public static void paixu2(int[] arr) { for(int x=0; x<arr.length-1; x++) { int num=arr[x],index=x; for (int y=x;y<arr.length;y++) { if(num<arr[y]) { num=arr[y]; index = y; } } if(x!=index) swap(arr,x,index); } }

    基本查找 找数组中某个数字在数组中的位置,即标号。遍历,存在返回角标,不存在返回-1。

    public static int getindex(int[] arr,int a) { for(int x=0; x<arr.length; x++) { if(arr[x]==a) return x; } return -1; }

    折半查找

    能用折半查找的前提是,查找的数组是有序的数组。 注意: 需要定义三个变量,分别指向头、尾、和头尾的中值。通过比较中值来确定数据在那一部分。不断移动头尾变量的值,最终可查到所查找变量对应的角标,找不到返回-1。

    public static int getindex1(int[] arr,int a) { int min=0,max=arr.length-1; int mid=(min+max)/2; while(min<=max) { if(arr[mid]>a) { max=mid-1; } else if (arr[mid]<a) { min = mid+1; } else return mid; mid=(min+max)/2; } return -1; }

    注意: 在java内部有开发用的二分法查找函数:

    Arrays.binarySearch(arr);

    功能为:如果存在,返回角标,如果不存在,则返回-min-1,即负的插入点减1。(该做法是为了避免与存在时冲突),同时也需要加头文件。

    进制转化

    将一个整数转为16进制表现形式

    思路:1、进行位运算,16进制即4位为一个单位。故可以4位4位的取整数。得到各个位上的16进制数。 2、取4位则可以采取与1111(15)的方式。 3、然后右移4位:>>> 4。(无符号右移) 4、大于10时要转化,即(char)(temp-10+‘A’),或者使用查表法。直接搞一个数组存0-F。 5、数据一多,就先存起来,再进行操作。所以可以定义一个数组,作为临时容器,用指针进行操作。 6、由于从低位开始转为,故从数组的最后一个开始存,这样输出的时候就是正序啦。

    将一个整数转为其它制表现形式

    1、2进制则与上1即可,而8进制则与上3位,即111(7)。 2、存储的数组长度需要加长啦。

    以上,在java函数中都有相应的内置函数。 Integer.toBinaryString();//十进制→2进制 Integer.toHexString();//十进制 →16进制 integer.toOctal();//十进制 → 8进制


    最新回复(0)