数组大法
今天又看了看数组,觉得数组能做的事挺多的,于是就写了一些数据公共的方法,等以后有时间需要专门写一篇关于所有排序算法的理解以及相关程序的实现,今天先写了一些基本的东西
1 package com.baseoop; 2 3 //建立一个数组的工具类 4 public class ArrayUtils { 5 //获取数组的最大值 6 public int getMax(int[] arr) { 7 int max = arr[0]; 8 for (int i = 0; i < arr.length; i++) { 9 //max = arr[0]; 10 if (max < arr[i]) { 11 max = arr[i]; 12 } 13 } 14 return max; 15 } 16 17 //获取数组的最小值 18 public int getMini(int[] arr) { 19 int min = arr[0]; 20 for (int i = 0; i < arr.length; i++) { 21 if (min > arr[i]) { 22 min = arr[i]; 23 } 24 } 25 return min; 26 } 27 28 //遍历数组元素 29 public void printArray(int[] arr) { 30 System.out.print("["); 31 for (int i = 0; i < arr.length; i++) { 32 System.out.print(arr[i] + "\t"); 33 } 34 System.out.println("]"); 35 36 37 } 38 39 //求数组的平均值 40 public int averArr(int[] arr) { 41 int ave = 0; 42 int sum = 0; 43 for (int i = 0; i < arr.length; i++) { 44 sum = sum + arr[i]; 45 ave = sum / arr.length; 46 } 47 return ave; 48 } 49 50 //求数组的总和 51 public int getArrSum(int[] arr) { 52 int sum = 0; 53 for (int i = 0; i < arr.length; i++) { 54 sum = sum + arr[i]; 55 } 56 return sum; 57 } 58 59 // 数组的反转 60 public int[] reverseArr(int[] arr) { 61 for (int a = 0, b = arr.length - 1; a < b; a++, b--) { 62 int temp = arr[a]; 63 arr[a] = arr[b]; 64 arr[b] = temp; 65 66 } 67 return arr; 68 } 69 70 //数组的复制 71 public int[] copyArr(int[] arr) { 72 int[] arr1 = new int[arr.length]; 73 for (int i = 0; i < arr1.length; i++) { 74 arr1[i] = arr[i]; 75 } 76 return arr; 77 } 78 79 //数组的排序--使用冒泡排序从小到大排序 80 public void sortArray(int[] arr) { 81 for (int i = 0; i < arr.length - 1; i++) { 82 for (int j = 0; j < arr.length - 1 - i; j++) { 83 if (arr[j] > arr[j + 1]) { 84 int temp = arr[j]; 85 arr[j] = arr[j + 1]; 86 arr[j + 1] = temp; 87 } 88 } 89 } 90 printArray(arr); 91 } 92 93 //对数组使用直接选择排序算法排序 94 public void selectSort(int[] arr) { 95 for (int i = 0; i <arr.length-1 ; i++) { 96 for (int j = i; j <arr.length ; j++) { 97 if(arr[i]>arr[j]){ 98 int temp = arr[i]; 99 arr[i] = arr[j]; 100 arr[j] = temp; 101 } 102 } 103 } 104 printArray(arr); 105 } 106 //直接选择排序1 107 public void selectSortArr(int[] arr){ 108 int temp; //辅助节点 109 for (int i = 0; i <arr.length-1 ; i++) { //n-1趟排序 110 //每趟再从arr[i]开始的子序列中寻找最小关键字的记录 111 int min = i; //设置第i条记录的关键字值最小 112 for (int j = i+1; j <arr.length ; j++) { //在子序列中选择关键字最小的记录 113 if (arr[j] < arr[min]){ 114 min = j; //记住关键字值最小记录的下标 115 } 116 117 } 118 if(min != i){ //将本趟关键字值最小记录与第i条记录交换 119 temp = arr[i]; 120 arr[i] = arr[min]; 121 arr[min] = temp; 122 } 123 } 124 printArray(arr); 125 } 126 127 }
然后写了一个测试类,测试一下
1 package com.baseoop; 2 3 public class TestArrayUtils { 4 public static void main(String[] args) { 5 int[] arr = new int[]{12, 23, 11, 56, -2, 34, 43}; 6 ArrayUtils arrayUtils = new ArrayUtils(); 7 int max = arrayUtils.getMax(arr); 8 System.out.println("数组arr的最大值是:" + max); 9 int min = arrayUtils.getMini(arr); 10 System.out.println("数组arr的最小值是:" + min); 11 System.out.println("==================="); 12 //System.out.println("数组arr的遍历结果是:"+arrayUtils.printArray(arr)); 13 arrayUtils.printArray(arr); 14 System.out.println("数组排序:"); 15 arrayUtils.sortArray(arr); 16 System.out.println("数组求和"); 17 int sum = arrayUtils.getArrSum(arr); 18 System.out.println(sum); 19 System.out.println("数组求平均数"); 20 double avg = arrayUtils.averArr(arr); 21 System.out.println(avg); 22 System.out.println("使用直接选择排序"); 23 arrayUtils.selectSort(arr); 24 System.out.println("直接选择排序1"); 25 arrayUtils.selectSortArr(arr); 26 27 28 29 30 31 32 } 33 }
运行结果如下图: