算法01-蛮力法

原创 2018年04月16日 17:57:32

算法01-蛮力法

一、蛮力法介绍

蛮力法(brute force method,也称为穷举法或枚举法)是一种简单直接地解决问题的方法,常常直接基于问题的描述,所以,蛮力法也是最容易应用的方法。但是,用蛮力法设计的算法时间特性往往也是最低的,典型的指数时间算法一般都是通过蛮力搜索而得到的 。

常见的蛮力法:冒泡排序、选择排序。

二、冒泡排序

1、基本思想

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名“冒泡排序”。

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

冒泡排序是稳定的排序算法,适合少量数据的排序(10张以内),比如炸金花。

2、代码实现

public static <E extends Comparable<E>> void bubbleSort(E[] arr) {
    if (arr == null || arr.length == 0) {
        return;
    }

    //从小到大排序
    for (int i = 0; i < arr.length - 1; i++) {
        // 判断是否排好序:可能在遍历完之前就已经排好序了
        boolean flag = true;
        for (int j = 0; j < arr.length - 1 - i; j++) {
            E temp = arr[j];
            if (arr[j].compareTo(arr[j + 1]) > 0) {
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                flag = false;
            }
        }
        if (flag) {
            return;
        }
    }
}

三、选择排序

1、基本思想

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

选择排序是不稳定的排序方法(比如序列[5, 8, 3]第一次就将[5]与[3]交换,导致5挪动到8后面)。选择排序的移动次数较少,适合少量数据的排序(10~20)。

2、代码实现

public static <E extends Comparable<E>> void selectSort(E[] arr) {
    if (arr == null || arr.length == 0) {
        return;
    }

    for (int i = 0; i < arr.length - 1; i++) {
        //先找到最值
        int index = i;
        for (int j = i + 1; j < arr.length; j++) {
            E temp = arr[index];
            if (temp.compareTo(arr[j]) > 0) {
                index = j;
            }
        }

        //然后与最值交换
        if (index != i) {
            E temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;
        }
    }
}

demo已上传gitee,需要的同学可以下载!

上一篇:数据结构09-图

下一篇:算法02-递归

算法设计之蛮力法

•蛮力法(也叫穷举法),是一种直接解决问题的方法,常常直接基于问题的描述和所涉及的概念及定义。...
  • u012808977
  • u012808977
  • 2014-08-31 21:19:11
  • 605

蛮力法背包问题

//============================================================================ // Name : 背包问题...
  • wzm10455
  • wzm10455
  • 2012-12-03 18:41:17
  • 1724

蛮力法之背包问题

假设平面上有一些点,过某些点作一个多边形,使这个多边形能把所有点都“包”起来。当这个多边形是凸多边形的时候,我们就叫它“凸包”。 今天写如何用蛮力解决凸包问题。 凸包有一个重要性质:如果点集中两个...
  • xckkcxxck
  • xckkcxxck
  • 2017-02-28 17:09:26
  • 577

蛮力法:设计算法求解背包问题,并编程实现。

蛮力法:设计算法求解背包问题,并编程实现。 背包问题: 给定重量分别为,价值分别为的n件物品,和一个承重为W的背包。求这些物品中一个最有价值的子集,并能装到背包中。 背包问题的蛮力解法是穷举这些物...
  • u011329762
  • u011329762
  • 2014-11-11 18:41:21
  • 2974

算法设计与分析学习-蛮力法

参考 :  算法设计与分析   第三章  蛮力法 接下来的每章中,我们专注于一种特定的算法设计策略。 蛮力法是一种最简单和直接的解决问题的办法,往往是低效的,但我们不应该忽略它的地位, ...
  • mengzhejin
  • mengzhejin
  • 2014-07-16 13:09:17
  • 1376

蛮力法中提到很多类型的问题,典型蛮力算法的复杂性如下

蛮力法中顺序查找的时间复杂度为O(n) BF 算法的时间复杂度为O(n*m) KMP算法的时间复杂度为O(n) 选择和冒炮排序的时间复杂性O(n*n)                   ...
  • j2013210855
  • j2013210855
  • 2015-04-12 19:32:24
  • 358

算法设计分析与基础,用蛮力法解决凸包问题

  • 2010年10月16日 15:55
  • 2KB
  • 下载

哈密顿回路及解法

哈密顿回路: 1、指一个对图的每个顶点都只穿越一次的回路。也可以 定义为n+1个相邻顶点v0, v1, … ,vn, v0的一个序列,其中序列的第一个顶点和最后一个顶点是相同的,而其他n-1个顶点是...
  • u010925967
  • u010925967
  • 2017-12-24 15:11:59
  • 339

凸包算法的蛮力实现

蛮力实现凸包算法,思路是相当简单的,每两个点形成一条边来看看他是否是边界线——即看其他的点是否都在这条边的左边或都在右边:下面就是我的算法C++实现:   #include #include ...
  • u013708970
  • u013708970
  • 2014-03-10 19:49:42
  • 1196

01背包问题的动态规划算法、蛮力法和空间优化算法

算法思想: (1)、动态规划算法:解决背包物品价值最大化问题的最优解,是建立在每一个子问题的最优解的前提下完成的。设Value[i,j]表示的是i个物品放进背包容量为j的背包的价值,令i从0增至n(...
  • iamubbTing
  • iamubbTing
  • 2016-11-10 18:32:52
  • 1765
收藏助手
不良信息举报
您举报文章:算法01-蛮力法
举报原因:
原因补充:

(最多只允许输入30个字)