当前位置:   article > 正文

数组算法(数组的反转、最大值/最小值/总和/平均值、缩容、扩容、二分查找/线性查找、冒泡排序)_求数组的平均值最大值最小值

求数组的平均值最大值最小值

一、数组的反转

  1. public static void main(String[] args) {
  2. //声明一个数组
  3. int[] arr = new int[]{10,20,30,40,50,60,70,89,90};
  4. //反转之前遍历
  5. for (int i = 0; i < arr.length; i++) {
  6. System.out.print(arr[i]+"\t");
  7. }
  8. //方式1反转操作
  9. for (int i = 0; i < arr.length/2; i++) {
  10. //交互arr[i]与arr[arr.length-1-i]位置
  11. int temp = arr[i];
  12. arr[i] = arr[arr.length-1-i];
  13. arr[arr.length-1-i]=temp;
  14. }
  15. //方式2反转操作
  16. for (int i = 0, j =arr.length-1;i<j; i++,j--) {
  17. //交互arr[i]与arr[j]位置
  18. int temp = arr[i];
  19. arr[i] =arr[j];
  20. arr[j] = temp;
  21. }
  22. System.out.println();
  23. //反转之后遍历
  24. for (int i = 0; i < arr.length; i++) {
  25. System.out.print(arr[i]+"\t");
  26. }
  27. }

二、数组求最大值、最小值、总和、平均值

  1. /**
  2. *定义一个int型的以为数组,包含10个元素,分别赋一些随机整数,
  3. * 然后求出所有元素的最大值、最小值、总和、平均值
  4. * @param args
  5. */
  6. public static void main(String[] args) {
  7. //动态初始化方式创建数组
  8. int[] arr = new int[10];
  9. //通过循环给数组元素赋值
  10. for (int i = 0; i < arr.length; i++) {
  11. arr[i] =(int)(Math.random()*(99-10+1))+10;
  12. System.out.print(arr[i]+"\t");
  13. }
  14. System.out.println();
  15. //求最大值
  16. int max = arr[0];
  17. for (int i = 1; i < arr.length; i++) {
  18. if(max<arr[i]){
  19. max = arr[i];
  20. }
  21. }
  22. System.out.println("最大值为:"+max);
  23. //求最小值
  24. int min = arr[0];
  25. for (int i = 1; i < arr.length; i++) {
  26. if(min>arr[i]){
  27. min = arr[i];
  28. }
  29. }
  30. System.out.println("最小值为:"+min);
  31. //求总和
  32. int sum = 0;
  33. for (int i = 0; i < arr.length; i++) {
  34. sum += arr[i];
  35. }
  36. System.out.println("总和:"+sum);
  37. //求平均值
  38. int avgValue = sum/arr.length;
  39. System.out.println("平均值:"+avgValue);
  40. }
  1. /**
  2. *定义一个数组,求去掉最高分,去掉最低分后的平均分
  3. * @param args
  4. */
  5. public static void main(String[] args) {
  6. int[] scores = {5,4,6,8,9,0,1,2,7,3};
  7. //声明3个特征值
  8. int sum = 0;
  9. int max = scores[0];
  10. int min = scores[0];
  11. for (int i = 0; i < scores.length; i++) {
  12. sum += scores[i];
  13. //用于获取做高分
  14. if(max < scores[i]){
  15. max =scores[i];
  16. }
  17. //用于获取最低分
  18. if(min > scores[i]){
  19. min =scores[i];
  20. }
  21. }
  22. int avg = (sum-max-min)/(scores.length-2);
  23. System.out.println("去掉一个最高分和去掉一个最低分之后的平均分:" + avg);
  24. }

三、数组的扩容

  1. /**
  2. *数组的扩容 定义一组数组 扩容1倍容量,并将10,20,30三个数据添加到数组中
  3. * @param args
  4. */
  5. public static void main(String[] args) {
  6. int[] arr = {1,2,3,4,5};
  7. //扩容1倍容量
  8. // int[] newArr = new int[arr.length*2];
  9. //或者
  10. int[] newArr = new int[arr.length << 1];
  11. //将原有数组中的元素复制到新的数组中
  12. for (int i = 0; i < arr.length; i++) {
  13. newArr[i] = arr[i];
  14. }
  15. //将10,20,30添加到新的数组中
  16. newArr[arr.length]=10;
  17. newArr[arr.length+1]=20;
  18. newArr[arr.length+2]=30;
  19. //将新的数组的地址赋值给原有的数组变量
  20. arr = newArr;
  21. //遍历查看
  22. for (int i = 0; i < arr.length; i++) {
  23. System.out.print(arr[i]+"\t");
  24. }
  25. }

四、数组的缩容

  1. /**
  2. *数组的缩容
  3. * @param args
  4. */
  5. public static void main(String[] args) {
  6. int[] arr = {1,2,3,4,5};
  7. //删除下标为4
  8. int deleteIndex = 4;
  9. //方式1 不新建数组 修改下标4 之后的数租的位置(下标)
  10. for (int i = deleteIndex; i < arr.length - 1; i++) {
  11. arr[i] = arr[i+1];
  12. }
  13. //修改最后元素设置为默认值
  14. arr[arr.length-1] = 0;
  15. //遍历缩容后的数组
  16. for (int i = 0; i < arr.length; i++) {
  17. System.out.print(arr[i]+"\t");
  18. }
  19. }

五、数组线性查找

  1. /**
  2. *数组的线性查找(必须排好序)
  3. * 优点: 简单
  4. * 缺点:效率低
  5. * @param args
  6. */
  7. public static void main(String[] args) {
  8. int[] arr = {35,6546,445,5,515,63,65,68};
  9. //定义一个要查找的目标
  10. int target = 15;
  11. //定义一个布尔类型的临时变量若进去for 循环中的if 后改为false
  12. boolean isFlag = true;
  13. //查找方式
  14. for (int i = 0; i < arr.length; i++) {
  15. if(target==arr[i]){
  16. System.out.println("找到了"+target+"对应的位置"+i);
  17. isFlag=false;
  18. break;
  19. }
  20. }
  21. if(isFlag){
  22. System.out.println("未找到");
  23. }
  24. }

六、数组二分查找(数组必须有序)

  1. /**
  2. *数组的二分查找(必须排好序)
  3. * 优点: 效率高
  4. * 缺点:比顺序查找难一点,数组必须有序
  5. * @param args
  6. */
  7. public static void main(String[] args) {
  8. int[] arr = {2,3,4,5,6,8,9,10,15,18,19};
  9. //定义一个要查找的目标
  10. int target = 15;
  11. int head = 0;//默认的首索引
  12. int end = arr.length-1;//默认的尾索引
  13. //判断是否找到了指定元素
  14. boolean isFlsg = false;
  15. while(head <= end){
  16. int middle = (head+end);
  17. if(target == arr[middle]){
  18. System.out.println("找到了"+target+"位置在"+middle);
  19. isFlsg = true;
  20. break;
  21. }else if( target > arr[middle]){
  22. head = middle +1;
  23. }else {
  24. end = middle-1;
  25. }
  26. }
  27. if(!isFlsg){
  28. System.out.println("未找到");
  29. }

七、数组冒泡排序

  1. /**
  2. *数组的冒泡排序
  3. * @param args
  4. */
  5. public static void main(String[] args) {
  6. int[] arr = {2,5,52,5689,36,36,18,19};
  7. //排序之前进行遍历
  8. for (int i = 0; i < arr.length; i++) {
  9. System.out.print(arr[i]+ "\t");
  10. }
  11. //冒泡排序实现从小到大排序
  12. for (int j = 0; j < arr.length-1; j++) {
  13. for (int i = 0; i < arr.length-1-j; i++) {
  14. if(arr[i]>arr[i+1]){
  15. //交互arr[i]与arr[i+1]位置
  16. int temp = arr[i];
  17. arr[i] = arr[i+1];
  18. arr[i+1] = temp;
  19. }
  20. }
  21. }
  22. System.out.println();
  23. //排序之后进行遍历
  24. for (int i = 0; i < arr.length; i++) {
  25. System.out.print(arr[i]+ "\t");
  26. }
  27. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/598790
推荐阅读
相关标签
  

闽ICP备14008679号