数组的算法

数组的算法

    在我们计算机界, 简称机界, 有这么一句话, “程序是由数据结构+算法组成的.”. 数据结构我们后面还会给大家慢慢普及, 那算法呢? 已经学了这么多了, 该来点儿逻辑思维强一点的东西了. 也是给自己设置的一个小小障碍吧.
    数组学完了, 很简单的一个知识点. 但是, 学完数组不讲一点儿算法, 总觉着心里过不去, 好像少了一点儿什么东西一样. 那本节就给大家讲一丢丢

算法1: 质数

质数: 只能被1和自身整除的数
思路: 用户任意输入一个数字n, 假设n=7, 如何判断7是否是质数呢? 既然概念上讲只能被1和自身整除, 那我们就从2开始除. 看是否能整除. 如果能整除, 一定不是质数. 如果不能整除, 继续除以3. 以此类推. 一直除到6. 也就是n-1 如果在这期间. 没有人能够被整除. 这个数一定是质数.
 
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字");
int n = sc.nextInt();
boolean flag = true;
for (int i = 2; i < n; i++) {
    if (n % i == 0) {
        flag = false;
        break;
    }
}
if (flag) {
    System.out.println("是质数");
} else {
    System.out.println("不是质数");
}

算法2: 冒泡排序

 
排序算法永远是程序员的痛. 我们今天介绍一个入门算法
 
我们把算法分为三部分:
如何实现两个数互换
使用交换的方式把数组中最大的数移动到数组的最后
不停的重复第二步.
 
第一步, 交换:
有变量a, 和变量b. 想要实现互换. 并不是一件容易的事. 先看错误示范:
 
 int a = 10;
 int b = 20;
 a = b;
 b = a;
 System.out.println(a); // 20
 System.out.println(b); // 20
 
为什么会这样呢? a = b的时候是把b的值赋值给a. 那a原来的值就没了….所以最后的结果都是20
正确的交换算法:
 int a = 10;
 int b = 20;
 int c = a; // 引入中间变量
 a = b;
 b = c;
 System.out.println(a);
 System.out.println(b);

 完整代码

int[] arr = {1, 55, 2, 17, 8, 12, 5};
for (int i = 0; i < arr.length - 1; i++) {  //要移动多少次
    for (int j = 0; j < arr.length - i - 1; j++) { //每次要比较的范围
        if (arr[j] > arr[j + 1]) {
            int c = arr[j];     //大的数
            arr[j] = arr[j + 1];  //交换
            arr[j + 1] = c;
        }
    }
}
 
System.out.println("冒泡排序完成:");
//        System.out.println(arr);
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

算法3: 求数组中最大的数

 int[] arr = {1,55,2,17, 8,12,5};
 // 假设第0个元素就是最大值
 int max = arr[0];
 
 // 判断是不是有比最大值还大的值
 for(int i = 0 ; i < arr.length; i++){
     if(arr[i] > max){
         max = arr[i];
     }
 }
 
 System.out.println("最大值是:" + max);

算法4: 计算平方和

 
 int[] arr = {1,55,2,17, 8,12,5};
 
 // 保存最后的结果
 int sum = 0;
 for(int i = 0; i < arr.length; i++){
     int n = arr[i] * arr[i]; // 求平方
     sum += n; //累加到一起
 }
 
 System.out.println(sum); 
posted @ 2020-01-12 16:20  前海渔文乐  阅读(458)  评论(0编辑  收藏  举报