常用算法总结

本文总结了9种常用的算法方法,包括蛮力法、分治法、减治法、动态规划法、贪心法、回溯法、分支限界法、近似算法和概率算法。在各个方法中,列举了具体的应用实例,如蛮力法在查找、排序、组合问题和图论问题中的应用,分治法在排序和组合问题中的应用,减治法在查找和排序问题中的应用,以及动态规划法等高阶算法的介绍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.蛮力法

蛮力法也称穷举法或者枚举法,设计思想:采用一定的策略依次处理待求解问题的所有元素,从而找出问题的解。

蛮力法在查找问题中的应用

  • 顺序查找

顺序查找是在查找集合中依次查询值为k的元素,若成功找出,则给出该元素在查找集合中的位置,若查找失败,则给出失败信息。

算法实现如下:

public static int getIndex(int[] arr,int k){
        for(int i =0;i<arr.length;i++){
            if(k == arr[i]){
                return  ++i;
            }
        }
        return -1;
    }
  • 串匹配问题

蛮力法在排序问题中的应用

  • 选择排序

选择排序的基本思想是第i趟排序在无序序列Ri~Rn中找到值最小的记录,并和第i个记录交换作为有序序列的第i个记录。

代码实现如下:

public static void selectSort(int[] arr){
        int index ;
        int temp ;
        for(int i = 0 ; i < arr.length;i++){
            index = i ;
            for(int j = i+1;j<arr.length;j++){
                if(arr[index]>arr[j]){
                    index = j;
                }
            }
            if(index != i ){//若不是最小交换位置
                temp = arr[i];
                arr[i]= arr[index];
                arr[index] = temp;
            }
        }
    }
  • 冒泡排序

冒泡排序的基本思想是两两比较相邻的记录,如果反序则交换,直到没有反序的记录为止。

代码实现如下

public static void bubbleSort(int[] arr){
        int temp ;
        for(int i = arr.length-1 ; i > 0;i--){
            for(int j = 0;j<i;j++ ){
                if(arr[j]>arr[j+1]){
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }

蛮力法在组合问题中的应用

  • 背包问题
  • 任务分配问题

蛮力法在图中的应用

  • 哈密顿回路问题
  • TSP问题

蛮力法在几何问题中的应用

  • 最近对问题
  • 凸包问题

2.分治法

在排序问题中的应用

  • 归并排序

归并排序的基本思想是将一个大的序列分成小的序列进行排序然后合并结果集

代码实现如下

 

  • 快速排序

实现代码如下

public static void quickSort(int[] arr,int start,int end){
        if(start>=end){
            return;
        }
        int low = start,high = end,index =start,temp;
        while (low<high){
            while (low<high){
                if(arr[high]<arr[index]){
                    temp = arr[high];
                    arr[high]=arr[index];
                    arr[index]= temp;
                    index = high;
                    break;
                }else {
                    high--;
                }
            }
            while (low<high){
                if(arr[low]>arr[index]){
                    temp = arr[low];
                    arr[low]=arr[index];
                    arr[index]=temp;
                    index = low;
                    break;
                }else {
                    low++;
                }
            }
        }
        if(start<index){
            quickSort(arr,start,index-1);
        }
        if(index<end){
            quickSort(arr,index+1,end);
        }
    }

在组合问题中的应用

  • 最大子短和问题
  • 棋盘覆盖问题

在几何问题中的应用

  • 最近对问题
  • 凸包问题

3.减治法

在查找问题中的应用

  • 折半查找
  • 二叉树查找

在排序问题中的应用

  • 插入排序

插入排序的基本思想是将数组分成两个部分,第一部门有序,第二部分无序,将无序区的第一个数插入到有序区的指定位置

代码实现如下:

/**
     * 插入排序实现
     * @param arr
     */
    public static void quiteSort(int[] arr){
        int temp ;
        for(int i = 1; i<arr.length;i++){
            temp = arr[i];
            for(int j = i-1;j>=0;j--){
              if(arr[j+1]<arr[j]){
                  arr[j+1] = arr[j];
                  arr[j] = temp;
              }else {
                  break;
              }
            }
        }
    }
  • 堆排序

在组合问题中的应用

  • 淘汰赛冠军问题
  • 假币问题

4.动态规划法

5.贪心法

6.回溯法

7.分支限界法

8.近似算法

9.概率算法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值