蛮力算法也称为穷举法暴力法,它是算法设计中最常见的方法之一。蛮力算法的基本思路是对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试为止。

蛮力算法的概述

蛮力法是一种简单、直接地解决问题的方法,通常直接基于问题的描述和所涉及的概念定义。

蛮力算法是基于计算机运算速度快这一特性,在解决问题时采用的一种“懒惰”策略。

蛮力算法的优点:

  • 逻辑清晰,编写程序简洁
  • 可以用来解决广阔领域的问题
  • 对于一些重要的问题,它可以产生一些合理的算法
  • 可以解决一些下小规模的问题
  • 可以作为其他高效算法的衡量标准

蛮力算法的缺点:
        设计的大多数算法的效率都不高,主要适合问题规模较小的问题求解

蛮力算法的基本应用:

采用蛮力算法的一般格式

例题:
        编写一个程序,求这样的四位数:该四位数的千位上的数字和百位上的数字都是被擦掉的,现知道十位上的数是1,个位上的数为2,已知这个数减去7就能被7整除,减去8就能被8整除,减去9就能被9整除。

代码如下:

package 蛮力算法;public class Demo01 {/*设这个数为ab12,则n = a*1000 + b*100 + 10 + 2,且有0 < a <= 9, 0 <= b <= 9*/public static void main(String[] args) {for (int a = 1; a <= 9; a++) {for (int b = 0; b <= 9; b++) {int n = a*1000 + b*100 + 10 + 2;if ((n - 7) % 7 == 0 && (n - 8) % 8 == 0 && (n - 9) % 9 == 0){System.out.println("这个数为:" + n);//输出的几结果为            这个数为: 1512}}}}
}

简单的选择排序和冒泡排序

选择排序

选择排序是一种简单直观的排序算法。首先在未排序的序列中找到一个最小(最大)元素,与起始位置的元素进行交换。然后,再从剩余未排序元素中继续寻找最小(最大)元素,然后与已排序元素的下一个位置的元素进行交换,反复循环,直到排序完成。

代码如下:

public class Demo {public static void main(String[] args) {  int[] arr = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};//将数组的长度赋值给lenint len=arr.length;for (int i = 0; i < len; i++) {//nums[i]放最小值 [i,len-1]int index=i;//min对应的位置//遍历数组与arr[index]比较for (int j = i+1; j < len; j++) {if(arr[index]>arr[j]) {//如果有比arr[index]小的元素,就把这个元素的下标赋值给index,遍历完后index拿到的就是最小值的下标index=j;}}//交换 min对应的位置上的值和i位置上的值交换if(index!=i) {int temp=arr[i];arr[i]=arr[index];arr[index]=temp;}}for (int i : arr) {System.out.print(i+"  ");}}}

冒泡排序:

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

算法描述

  • 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
  • 针对所有的元素重复以上的步骤,除了最后一个;
  • 重复步骤1~3,直到排序完成。

代码如下:

public class Demo{public static void main(String[] args) {int[] arr = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};int len=arr.length;        for (int i = 0; i < len-1; i++) {//优化:如果这一趟没有发生一次交换,就说明数列已有序boolean f=false;//false 没有发生交换  true 交换过//遍历数组for (int j = 0; j < len-1-i; j++) {//如果当前元素比后一个元素大就进行交换。反复循环,直到排序完成if(arr[j]>arr[j+1]) {int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;f=true;}}if(!f) {            //如果f = false ,说明一次交换也没有,则它们已经是顺序排序了,直接break跳出循环。break;}}for (int i : arr) {System.out.print(i+" ");}}}

【蛮力算法】数据结构与算法相关推荐

  1. 算法 | 数据结构与算法(代码版)

    ================================================= 博主github:https://github.com/MichaelBeechan 博主CSDN: ...

  2. C语言单链表实现FCFS算法,数据结构与算法复习题(含答案).doc

    <数据结构与算法>2015-2016学年第1学期考试复习题 选择题(下面各小题有一个正确答案,请将正确答案的编号填写在各小题的括号内). 1.在一棵具有5层的满二叉树中结点总数为( A ) ...

  3. 贪心算法设计作业调度c语言,贪心算法 - 数据结构与算法教程 - C语言网

    1.简介 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解. 贪心算法不是对所有问题都能得到整体最优 ...

  4. 二叉树的建立和遍历算法 - 数据结构和算法47

    二叉树的建立和遍历算法 让编程改变世界 Change the world by program   有童鞋会说,我们上节课研究这么多遍历的方法干啥呢?聪明的鱼油们怎么看?! 对于二叉树,思路方面我们已 ...

  5. Day600601.马踏棋盘算法 -数据结构和算法Java

    马踏棋盘算法 图的深度优先DFS 回溯 八皇后问题.小老鼠找迷宫问题 一.介绍 二.思路分析 三.代码实现 package com.achang.algorithm;import java.awt.* ...

  6. Day595.普利姆算法 -数据结构和算法Java

    普利姆算法 一.问题引出 二.最小生成树 三.普利姆算法介绍 四.图解分析 五.代码实现 package com.achang.algorithm;import java.util.Arrays;/* ...

  7. 算法 数据结构——收纳箱算法???

    . 最近工作上有一个需求,需要将图片打包成图集,以便于让资源更紧凑,利用率更高,提升性能,游戏行内的同志应该很熟练这个操作.通常我们需要用一个app来完成这项工作,最出名的莫过于Texture Pac ...

  8. 数据结构与算法笔记 - 绪论

    数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...

  9. JavaScript数据结构和算法

    前言 在过去的几年中,得益于Node.js的兴起,JavaScript越来越广泛地用于服务器端编程.鉴于JavaScript语言已经走出了浏览器,程序员发现他们需要更多传统语言(比如C++和Java) ...

  10. JAVA数据结构与算法【简单介绍】

    前几天去面一个大厂,面试官特别好,面试官说到,我们的学习不能本末倒置,数据结构和算法是程序的基础,如果数据结构你没有学好,你真正意义上不算会写代码.你的代码是各处粘贴,杂乱无章的. 由于现在大多用JA ...

最新文章

  1. python和R对dataframe的分组聚合操作:dplyr、groupby、agg、group_by、nunique、reset_index、rename、summarise、n_distinct
  2. SLAM优化位姿时,误差函数的雅可比矩阵的推导。
  3. UA MATH567 高维统计II 随机向量7 Grothendieck不等式
  4. 【笔记】基于Faster R-CNN的除草机器人杂草识别算法
  5. springmvc和mybatis面试题
  6. python中复制、浅层拷贝、深层拷贝的区别
  7. java jfinal 定时任务_JFinal 中的cron4j定时插件
  8. 职场‘下班沉默症’调查
  9. IDEA 运行spingboot时出现Process finished with exit code -1073741819 (0xC0000005)
  10. Git 在团队中的最佳实践--如何正确使用Git Flow
  11. 不要被约束的意思_不要再奢望你会变得自律了丨“他律”比“自律”更重要
  12. 李洪强iOS开发Swift篇—02_变量和常量
  13. 支付宝芝麻分多少算正常?分高有什么好处?
  14. Java爬坑 -- 解决redis序列化java8 LocalDateTime错误的问题
  15. 博客“评论王”评选活动开始啦!
  16. 数据挖掘-----Apriori算法
  17. java多线程--信号量Semaphore的使用
  18. java 获取数组(二维数组)长度实例程序
  19. WPS插件开发流程(1)
  20. 论文阅读Targetless Calibration of LiDAR-IMU System Based on Continuous-time Batch Optimization(含代码解读)

热门文章

  1. Oracle 同义词总结
  2. Java基础day2【谷】
  3. 九大狗年生肖宝宝取名原则
  4. 苏炳添博士论文研究自己,奥运学术两兼顾,还是暨大副教授,网友:真正的Run数据...
  5. opencv海思平台移植解决warning: ../../lib/libopencv_imgproc.so, needed by ../lib/libopencv_imgcodecs.so, not
  6. Windows 配置Maven仓库
  7. Lecture 12: Iterated Expectations; Sum of a Random Number of Random Variables
  8. 回顾 Exchange 2007 SCC 安装-供需要的人参考!
  9. 深度干货!一篇Paper带您读懂HTAP | StoneDB学术分享会第①期
  10. 网线/双绞线上各标识CAT, AWG, PR, UTP/STP/FTP/SFTP的含义