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