实验一 算法基础实验:数理基础与串匹配程序设计
实验目的:以字符串匹配问题为例,结合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));
}
}