算法第一次实验 数理基础与串匹配程序设计 蛮力优化算法实验

本文介绍了两个实验:利用BF算法在C++中进行字符串匹配,并分析其时间复杂度;以及选择排序和冒泡排序的实现,通过编程实例演示了这两个基本排序算法的过程和复杂度。
摘要由CSDN通过智能技术生成

实验一 算法基础实验:数理基础与串匹配程序设计

实验目的:以字符串匹配问题为例,结合C等编程语言和链表、堆、栈等数据结构知识,基于BF算法对字符串匹配问题进行求解,深刻理解数学知识在算法复杂度分析中的使用方法,学会算法分析的技能,进一步增强代码的设计和工程化实现能力。

实验内容:

(1)给定两个字符串S和T,利用BF算法,在主串S中查找子串T,并输出查找结果,输出时需以文字形式对查找结果进行定性说明

(2)要求以C++/C/Java等编程语言进行实现;

(3)建立算法时间复杂度分析模型,并利用计算机统计该算法的执行效率。

package Demo01;

import java.util.Scanner;
public class BruteForceSearch {

    public static int bfSearch(String S, String T) {
        int sLen = S.length();
        int tLen = T.length();
        for (int i = 0; i <= sLen - tLen; i++) {
            int j = 0;
            while (j < tLen && S.charAt(i + j) == T.charAt(j)) {
                j++;
            }
            if (j == tLen) {
                return i;  // 匹配成功,返回子串在主串中的起始位置
            }
        }
        return -1;  // 未找到匹配的子串
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入S字符串的内容");
        String S = scanner.nextLine();
        System.out.println("");
        System.out.println("请输入T字符串的内容");
        System.out.println("");
        String T = scanner.nextLine();
        int index = bfSearch(S, T)+1;
        if (index != -1) {
            System.out.println("在主串中找到子串,起始位置为 " + index + "其内容为" + T );
        } else {
            System.out.println("在主串中未找到子串");
        }
    }
}

实验二 蛮力优化算法实验

题目1、排序问题程序设计

实验目的:

(1)掌握选择排序和起泡排序的基本思想;

(2)掌握两种排序方法的具体实现过程;

(3)在掌握的基础上编程实现两种排序方法。

实验内容

输入一个待排序的序列,分别用选择排序和起泡排序两种排序方法将其变换成有序的序列,输出结果,输出时要求有文字说明。请任选一种语言编写程序实现上述算法,并分析其算法复杂度。

Sort 类 

package Demo2;

public class Sort {
    private int[] array;

    public Sort() {
    }

    public Sort(int[] array) {
        this.array = array;
    }


    public int[] getArray() {
        return array;
    }

    public void setArray(int[] array) {
        this.array = array;
    }

    // 选择排序
    public static int[] selectionSort(int[] arr) {
        int[] sortedArr = arr.clone();
        int n = sortedArr.length;
        for (int i = 0; i < n - 1; i++) {
            int minIdx = i;
            for (int j = i + 1; j < n; j++) {
                if (sortedArr[j] < sortedArr[minIdx]) {
                    minIdx = j;
                }
            }
            int temp = sortedArr[i];
            sortedArr[i] = sortedArr[minIdx];
            sortedArr[minIdx] = temp;
        }
        return sortedArr;
    }

    // 冒泡排序
    public static int[] bubbleSort(int[] arr) {
        int[] sortedArr = arr.clone();
        int n = sortedArr.length;
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (sortedArr[j] > sortedArr[j + 1]) {
                    int temp = sortedArr[j];
                    sortedArr[j] = sortedArr[j + 1];
                    sortedArr[j + 1] = temp;
                }
            }
        }
        return sortedArr;
    }


}

包括 空参 全参构造和所有的getter getter方法 是完整的Javabean 类

下面展示Text 类

package Demo2;
import java.util.Scanner;
import java.util.Arrays;

public class SortText {

    public static void main(String[] args) {
        System.out.println("请输入五个对应的数字");
        Scanner scanner = new Scanner(System.in);
        Sort sort = new Sort();
        int[] arr = new int[5];
        for (int i = 0; i < arr.length ; i++) {
            arr [i] = scanner.nextInt();
        }
        System.out.println("原始序列: " + Arrays.toString(arr));
        int[] arr1 = sort.selectionSort(arr);
        int[] arr2 = sort.bubbleSort(arr);
        System.out.println("选择排序后: " +  Arrays.toString(arr1));
        System.out.println("冒泡排序后: " +  Arrays.toString(arr2));
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值