Java学习之数组操作

遍历数组

遍历数组元素

public static void main(String[] args){
        int arrayNum[] = {12, 34, 2, 100, 22, 95, 99, 50, 46};
        //使用for循环
        for (int i=0; i<arrayNum.length; i++){
            System.out.print(arrayNum[i] +"\t");
        }

        //使用for...each循环,不能拿到数组下标
        for (int num:arrayNum) {
            System.out.print(num +"\t");
        }
}

数组打印:使用 Arrays.toString() 快速打印数组内容

 int arrayNum[] = {12, 34, 2, 100, 22, 95, 99, 50, 46};
      
//打印数组
 System.out.println(Arrays.toString(arrayNum));
//[12, 34, 2, 100, 22, 95, 99, 50, 46]

数组排序 

冒泡排序和快速排序

public static void main(String[] args){
        int arrayNum[] = {88, 12, 34, 2, 100, 22, 95, 99, 50, 46};

        //sort方法
        Arrays.sort(arrayNum);//默认升序
        System.out.println("sort排序后:" +Arrays.toString(arrayNum));
        
        maoPaoSort(arrayNum);

        quickSort(arrayNum,0,arrayNum.length-1);
        System.out.println("快速排序后:" +Arrays.toString(arrayNum));


    }
    //冒泡排序  --升序排序
//        比较相邻的元素。如果第一个比第二个大,就交换他们两个。
//        对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
//        针对所有的元素重复以上的步骤,除了最后一个,即需要进行length-1次。
//        第一次是对n个数进行n-1次比较,进行到最后第n个的一个是最大的;
//        第二次是对n-1个数进行n-2次比较,进行到最后第n-1个的一个是最大的;
//        ......
//        持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
    private static void maoPaoSort(int[] arrayNum){
        for(int i=0; i<arrayNum.length-1; i++){
            for(int j=0; j<arrayNum.length-i-1;j++){
                if(arrayNum[j]>arrayNum[j+1]){
                    int temp = arrayNum[j];
                    arrayNum[j] = arrayNum[j+1];
                    arrayNum[j+1] = temp;
                }
            }
        }
        System.out.println("冒泡排序后:" +Arrays.toString(arrayNum));
    }
    //快速排序
//    思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
    private static void quickSort(int[] array,int begin,int end){
        if(begin<end){  //i和j没相遇之前比较各数据与基准值大小
            int base = array[begin];  //取第一个值为基准值
            int i = begin;  //左标记为i
            int j = end;    //右标记为j

            //一趟排序,找到比基准值大的在基准值右,比基准值小的在基准值左
            while(i<j){
                //从右往左扫描
                while(i<j && array[j]>base){ //从右往左扫,如果元素比基准值大
                    j--;  //则右边标记--,直到找到第一个比基准值小的,停止扫描
                }
                if(i<j){
                    array[i]=array[j];  //交换右扫描第一个比基准值小的数
                    i++;  //i标记右移一位
                }
                //从左往右扫描
                while(i<j && array[i]<base){//从左往右扫,如果元素比基准值小
                    i++;  //则左标记++,直到找到第一个比基准值大的,停止扫描
                }
                if(i<j){
                    array[j]=array[i];  //交换左扫描第一个比基准值大的数
                    j--;  //j标记左移一位
                }
            }  //此时基准值左右两侧相对有序

            array[i] = base;  //此时i为中间位置k

            quickSort(array,begin,i-1);  //左侧按照快排思路,递归

            quickSort(array,i+1,end);    //右侧按照快排思路,递归
        }

    }

多维数组

int arrNums[][] = {{12,21,24,42},{34,35,65,76},{32,88,99}};
//访问二维数组的某个元素需要使用array[row][col]
System.out.println("访问二维数组:" +arrNums[1][3]);   //76
//打印一个二维数组,使用双重for循环
for (int i[] : arrNums){
//System.out.println(Arrays.toString(i));
   for (int n:i) {
       System.out.print(n +"\t");
   }
   System.out.println();
}
posted @ 2021-09-27 10:05  rissa  阅读(55)  评论(0)    收藏  举报

记录学习笔记,会有很多是参考重复,如有侵权,联系删除