java se--2.数组-3.常见算法

来源:互联网 发布:mac用pe安装win7系统 编辑:程序博客网 时间:2024/06/08 14:25

1      数组的常用算法

1.1  求数组元素的最大值、最小值、平均数、总和等

 //数组最大值   public int getMax(int[] arr) {      int max = arr[0];      for (int i = 1; i < arr.length; i++) {         if (max < arr[i]) {            max= arr[i];         }      }      return max;   }

  //数组的最小值   public int getMin(int[] arr) {      int min = arr[0];      for (int i = 1; i < arr.length; i++) {         if (min > arr[i]) {            min= arr[i];         }      }      return min;   }
  // 遍历数组元素   public void printArray(int[] arr) {      System.out.print("[");      for (int i = 0; i < arr.length; i++) {         System.out.print(arr[i] + "\t");      }      System.out.println("]");   }
 //数组平均数   public int avg(int[] arr) {      int sum = getSum(arr);      return sum / arr.length;   }

  // 数组的总和   public int getSum(int[] arr) {      int sum = 0;      for (int i = 0; i < arr.length; i++) {         sum+= arr[i];      }      return sum;   }

 

1.2  数组的复制、反转

// 数组的反转   public int[] reverse(int[] arr) {      for (int x = 0, y = arr.length - 1; x < y; x++,y--) {         int temp = arr[x];         arr[x]= arr[y];         arr[y]= temp;      }       return arr;   }

 //数组的复制   public int[] copy(int[] arr) {      // int[] arr1 = arr;      // return arr1;      int[] arr1 = new int[arr.length];      for (int i = 0; i < arr.length; i++) {         arr1[i]= arr[i];      }      return arr1;   }

1.3   数组元素的排序

// 数组的排序public void sort(int[] arr, String desc) {if (desc == "asc") {//从小到大for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {swap(arr,j,j+1);}}}} else if (desc == "desc") {//从大到小for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] < arr[j + 1]) {swap(arr,j,j+1);}}}} else {System.out.println("你输入的排序方式有误");}}public void swap(int[] arr,int i,int j){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}

2      排序与查找

2.1  直接排序

案例二:使用直接排序对数组进行排序:

      /*    选择排序。    以一个角标的元素和其他元素进行比较。    在内循环第一次结束,最值出现的头角标位置上。    */    public static void selectSort(int[] arr)    {       for(int x=0; x<arr.length-1; x++)       {           for(int y=x+1; y<arr.length; y++)//为什么y的初始化值是 x+1?         因为每一次比较,                                       //都用x角标上的元素和下一个元素进         行比较。           {              if(arr[x]>arr[y])              {                  int temp = arr[x];                  arr[x] = arr[y];                  arr[y] = temp;              }           }       }      }

                        

2.2  冒泡排序

案例三:冒泡排序

  /*    冒泡排序。    比较方式:相邻两个元素进行比较。如果满足条件就进行位置置换。    原理:内循环结束一次,最值出现在尾角标位置。    */    public static void bubbleSort(int[] arr)    {       for(int x=0; x<arr.length-1; x++)       {           for(int y=0; y<arr.length-x-1; y++)//-x:让每次参与比较的元减。                                          //-1:避免角标越界。           {               if(arr[y]>arr[y+1])              {                  int temp = arr[y];                  arr[y] = arr[y+1];                  arr[y+1] = temp;              }           }       }}

2.3  折半查找

案例四:/*    为了提高查找效率,可使用折半查找的方式,注意:这种查找只对有序的数组有效。    这种方式也成为二分查找法。    */    public static int halfSeach(int[] arr,int key)    {       int min,mid,max;       min = 0;       max = arr.length-1;       mid = (max+min)/2;        while(arr[mid]!=key)       {           if(key>arr[mid])              min = mid + 1;           else if(key<arr[mid])              max = mid - 1;                     if(min>max)              return -1;              mid = (max+min)/2;       }       return mid;    }

案例五:数组翻转         /*    反转其实就是头角标和尾角标的元素进行位置的置换,    然后在让头角标自增。尾角标自减。    当头角标<尾角标时,可以进行置换的动作。    */    public static void reverseArray(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;     } 

3      Arrays类

 

 

Arrays.sort(arr);

System.out.println(Arrays.toString(arr));

原创粉丝点击