• 第二十四节:Java语言基础-讲解数组的综合应用


    标题图

    数组的综合应用

    数组的综合应用.png

    // 打印数组
    public static void printArray(int[] arr)
    {
     for(int x=0;x<arr.length;x++)
     {
        if(x!=arr.length-1){
         System.out.print(arr[x]+",");
        }else{
         System.out.print(arr[x]);
        }
      }
    }

    数组转字符串

    // 数组转换成为字符串
    // 结果返还为字符串,参数为数组
    public static String toString (int[] arr){
     // 定义字符串变量
     String temp = "[";
     for(int x = 0; x<arr.length; x++){
      // 判断是否为最后一位元素
      if(x != arr.length - 1){
       temp = temp + arr[x] + ",";
      }else{
        temp = temp + arr[x] + "]";
       }
     }
    }
    public static String getWeek(int num){
     String[] weeks = { "1", "2", "3", "4", "5", "6", "7" };
     if(num>7 || num<1){
      return num + "没有对应的星期";
     }
     return weeks[num];
    }

    选择排序

    选择排序是第一个人和后续排序的人进行比较,若第一个人大于第二个人,就进行交换,那么这时第一人就是最小的,然后这时的第一个人和第三个人进行比较,若这时的第一个人大于第三个人,就进行交换位置,这时第一个人又换人了,也变得更小了,就这样,把剩下的人以这种方法进行比较,直到最后,第一轮结束,在第一位的就是最小的值。

    这种就是排序算法,比如有6个人,第一轮要进行5次比较。小的值往前跑嘛。

    //第一轮  
    for(int index=1;index<arr.length;index++)  
    {  
    if(arr[0]>arr[index])  
    {  
      int temp = arr[0];  
      arr[0] = arr[index];  
      arr[index] = temp;  
    }  
    }  
    print(arr);  
    
    //第二轮  
    for(int index=2;index<arr.length;index++)  
    {  
    if(arr[1]>arr[index])  
    {  
      int temp = arr[1];  
      arr[1] = arr[index];  
      arr[index] = temp;  
    }  
    }  
    print(arr);  
    
    //第三轮  
    for(int index=3;index<arr.length;index++)  
    {  
    if(arr[2]>arr[index])  
    {  
      int temp = arr[2];  
      arr[2] = arr[index];  
      arr[index] = temp;  
    }  
    }  
    print(arr);  
    
    //第四轮  
    for(int index=4;index<arr.length;index++)  
    {  
    if(arr[3]>arr[index])  
    {  
      int temp = arr[3];  
      arr[3] = arr[index];  
      arr[index] = temp;  
     }  
    }  
    print(arr);  
    
    //第五轮  
    for(int index=5;index<arr.length;index++)  
    {  
    if(arr[4]>arr[index])  
    {  
      int temp = arr[4];  
      arr[3] = arr[index];  
      arr[index] = temp;  
     }  
    }  
    print(arr);  
    
    //第六轮没有,我们arr.length=6举例  
    //int index = 6;index<arr.length; false  

    优化:

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

    冒泡排序

    为什么这个排序要叫冒泡呢?为什么不叫其他名词呢?

    其实这个取名是根据排序算法的基本思路命名的,见名知意,冒泡排序,就是想泡泡在水里一样,在水里大的泡泡先浮出水面,就是大的先排出来,最小的最慢排出。

    冒泡排序,是对排序的各个元素从头到尾依次进行相邻的大小比较,比如你是队长,在你的面前有一排人,你要将其进行排序,依次按照从小到大排序。

    怎么理解最大的值被排除,你是队长,你对面前的一群人看不惯,进行排序,从左到右开始,第一个和第二个进行比较,大的那个就被挑出来,与第三个进行比较,接下来就是依次按照这个方法比较,就能把那个最大的值,最高的给挑出来不是,这就是第一轮的比较。

    接下来,最大的就不用跟他比较了,上面所述,在排序时,你面前的人,是不能乱动的,一旦比较哪个大,两者就换位,如果第一比第二个小,就是第二个大时,两者不用换位,第二个就与第三个进行比较。

    依照这个方法,两两比较,大的都被排到了最后,那么一旦排完,是不是都依照从小到大,(从低到高)的顺序在你面前排好了。

    代码示例

    我们用索引下标来解释

    //第一轮  
    for(int index=0;index < arr.length-1; index++){  
    //相邻两个比较  
     if(arr[index] > arr[index+1]){  
       int temp = arr[index];  
       arr[index] = arr[index+1];  
       arr[index+1] = temp;  
     }  
    }  
    
    print(arr);  
    
    for(int index=0;index < arr.length-2;index++){  
    //这里arr.length-2,为什么比上一次多减了1呢?  
    //因为第一轮,把最大的排出来了,就不用比较了,少了一个人  
     if(arr[index] > arr[index+1]){  
       int temp = arr[index];  
       arr[index] = arr[index+1];  
       arr[index+1] = temp;  
     }  
    }  
    
    print(arr);  
    
    for(int index=0;index < arr.length-3;index++){  
     if(arr[index]>arr[index+1]){  
       int temp = arr[index];  
       arr[index] = arr[index+1];  
       arr[index+1] = temp;  
     }  
    }  
    
    print(arr);  

    优化:

    for(int num=1;num<arr.length;num++){  
    
     for(int index=0;index<arr.length-num;index++){  
    
       if(arr[index]>arr[index+1]){  
         int temp = arr[index];  
         arr[index] = arr[index+1];  
         arr[index+1] = temp;  
       }  
     }  
    }  
    for(int x=0;x<arr.length-1;x++){
     for(int y=0;y<arr.length-1-x;y++){
      if(arr[y]>arr[y+1]){
       int temp = arr[y];
       arr[y] = arrp[y+1];
       arr[y+1] = temp;
       }
      }
    }

    二分查找,折半查找

    什么是二分查找,折半查找呢?就是我说一个数,你来猜,你答一个数,我说大了,或小了,直到找到为止。

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

    二分

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

    二维数组

    格式:

    int[][] arr = new int[2][3];

    int[][] arr = { {3,5,6}, {33,44,66}, {23,21,6} };

    for(int x=0; x<arr.length; x++){
     for(int y=0; y<arr[x].length; y++){
       sum += arr[x][y];
      }
    }
    public static void revese(int[] arr){
     for(int start=0, end = arr.length-1; start<end; start++,end--){
      swap(arr,start,end);
     }
    }
    
    public static void swap(int[] arr, int a, int b){
     int temp=arr[a];
     arr[a] = arr[b];
     arr[b] = temp;
    }

    结语

    • 本文主要讲解 Java语言基础-讲解数组的综合应用
    • 下面我将继续对Java、 Android中的其他知识 深入讲解 ,有兴趣可以继续关注
    • 小礼物走一走 or 点赞

    送❤

  • 相关阅读:
    js禁用回退键
    css和js引用图片路径
    js 文字横向滚动
    数组转换
    Vbox共享串口
    office2003 打开docx文件
    注销退出客户点击回退怎么办
    vs2010 安装mvc3
    修改头像
    iis发布网站局域网无法访问
  • 原文地址:https://www.cnblogs.com/dashucoding/p/11932532.html
Copyright © 2020-2023  润新知