算法分析课程报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
merge(a, low, mid, high, b); }
return; }
int main() {
int b[7];
int a[7] = {17, 56, 23, 88, 45, 2, 9};
merge_sort(a, 0, 6, b);
int i; for(i=0;i<7;i++) {
printf("%3d", a[i]); } printf("\n");
while(k>0 && j < array[k-1]){ array[k] = array[k-1]; k--;
}
array[k] = j; } } }
//冒泡排序 public static void popSort(int[] array){
for(int i=0;i<array.length;i++){ for(int j=i+1;j<array.length;j++){ if(array[i] > array[j]){ int temp = array[i]; array[i] = array[j]; array[j] = temp; } }
//插入排序 insertSort(arr); System.out.println("插入排序结果:"); printArray(arr);
//冒泡排序 arr = tempArr; popSort(arr); System.out.println("冒泡排序结果:"); printArray(arr);
} s[i] = x; quickSort(s, l, i - 1); quickSort(s, i + 1, r); } }
} 三、实验结果 1.循环赛日程表:
2.快速排序:
实验结果分析:
通过实验熟练掌握了递归和分治的的算法思想,而快速排序是 将要排序的数据分割成独立的两部分,其中一部分的所有数据都比 另外一部分的所有数据都要小,然后再按此方法对这两部分数据分
1.设有n=2k个运动员要进行网球循环赛。现要设计一个
满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次; (2)每个选手一天只能赛一次; (3)循环赛一共进行n-1天。 2.利用快速排序算法将数组{4,8,3,7,1,5,6,
2}进行快速排序。 二、算法实现 1. 循环赛日程表 import java.util.Scanner;
a[i] = b[k]; }
return; }
void merge_sort(int *a, int low, int high, int *b) {
if(low < high) {
int mid = (low + high) / 2;
merge_sort(a, low, mid, b); merge_sort(a, mid+1, high, b);
int i = l, j = r, x = s[l]; while (i < j) {
while(i < j && s[j] >= x) j--;
if(i < j) s[i++] = s[j];
while(i < j && s[i] < x) i++;
if(i < j) s[j--] = s[i];
scanner.close();
int[] player = new int[player_num+1]; int[][] schedule = new int[player_num+1][player_num];
make_schedule(player, schedule, 1, player_num);
}
} public static void merge_schedule(int[] player, int[][] schedule, int low, int high){
int i, k, l; //临时变量 int j; //选手i已安排好对手的天数加一
for(i=low, k=high;i<=high &&
} } } 2.归并排序 #include <stdio.h>
//合并a[low]...a[mid]和a[mid+1]...a[high] void merge(int *a, int low, int mid, int high, int *b) {
int i=low, j=mid+1, k=0;
问题。
实验仪器:
PC机一台(装有VC c++ 6.0或JAVA)
实验内容及步骤(或程序清单): 实验内容:
一、实验题目 1.利用递归与分治法的思想,将正整数10表示成一系列正整数之和。
2.利用合并排序算法将数组{4,8,3,7,1,5,6,2}进行合并排 序。
二、算法实现 1.整数划分 import java.util.Scanner;
if((n-a[0]) == (rl-1)){ System.out.print(a[i] + "\n");
} else{
System.out.print(a[i] + " "); }
return; }
for(i=m;i>0;i--){ if((i+sum) <= n){ a[rl++] = i; devide(a, i, sum+i, rl, n); rl--; }
return 0; }
三、实验结果 整数划分运行结果截图: 归并排序运行结果截图:
实验结果分析:
通过实验掌握了递归算法和分治算法的基本思想,并得到了具体实 现。我们知道归并排序是建立在归并操作上的一种有效的排序算法,该算法 是采用分治法的一个非常典型的应用。
教师批阅:
年 月 日 实验项目:递归与分治策略(2)
}
//插入排序 public static void insertSort(int[] array){
for(int i=1;i<array.length;i++){ if(array[i] < array[i-1]){ int j = array[i]; int k = i-1;
array[i] = array[i-1];
实验目的:
1、 掌握递归的基本思想,学会用递归方法解决实际问题。 2、 掌握分治法的基本思想,学会用分治法解决实际问题。 3、 了解分治法与递归的关系,会用某高级语言对算法进行描述,
解决一般问题。
实验仪器:
PC机一台(装有VC c++ 6.0或JAVA)
实验内容及步骤(或程序清单): 实验内容:
一、实验题目
k>=low;i++, k--) { j = (high - low + 1) / 2;
[l]; }
schedule[i][j++] = k; for(l=1;j<=high-low;j++, l++) {
schedule[i][j] = schedule[k]
}
return; } public static void make_schedule(int[] player, int[][] schedule, int low, int high){
int[] a = new int[100];
devide(a, n, 0, 0, n); } public static void devide(int a[], int m, int sum, int rl, int n){
int i;
if(sum == n){ for(i=0;i<rl-1;i++){ System.out.print(a[i] + "+"); }
while(i<=mid && j<=high) {
b[k++] = a[i] < a[j] ? a[i++] : a[j++]; }
while(i<=mid) {
b[k++] = a[i++]; }
while(j<=high) {
b[k++] = a[j++]; }
for(i=low,k=0;i<=high;i++,k++) {
少两种)将此系列 从大到小进行排列。
附注
二、算法实现
public class Sort {
/** * 用两种算法对数组 * {6,3,25,42,89,9,60,30} * 进行排序 */ public static void main(String[] args) {
int[] arr = {6,3,25,42,89,9,60,30}; int[] tempArr = arr;
System.out.print(a[i] + " "); } System.out.println();
quickSort(a, 0, a.length-1);
System.out.println("排序后:"); for(int i=0;i<a.length;i++){
System.out.print(a[i] + " "); } System.out.println(); } public static void quickSort(int s[], int l, int r) { if (l < r) {
public class DevideInteger { public static void main(String[] args){ Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.close();
return; } } 2.快速排序
public class QuickSort { public static void main(String[] args) { int[] a = {4, 8, 3, 7, 1, 5, 6, 2};
System.out.println("排序前:"); for(int i=0;i<a.length;i++){
if(low == high) return;
int mid = (low + high) / 2;
make_schedule(player, schedule, low, mid);
make_schedule(player, schedule, mid+1, high);
merge_schedule(player, schedule, low, high);
} }
} 三、实验结果
实验结果分析:
通过实验熟练掌握了插入排序和冒泡排序的算法并用java语言具体实 现了,代码实现过程中遇到一些问题,通过自己的仔细检查解决了问题。实
验结果达到预期目的。
教师批阅:
年 月 日 实验项目:递归与分治策略(1) 实验目的:
1、 掌握递归的基本思想,学会用递归方法解决实际问题。 2、 掌握分治法的基本思想,学会用分治法解决实际问题。 3、 了解分治法与递归的关系,会用某高级语言对算法进行描述,解决一般
for(int i=1;i<=player_num;i++){ System.out.print(i + ":"); for(int j=1;j<player_num;j++){ System.out.print(schedule[i]
[j] + " "); } System.out.println();
附注
public class Schedule { public static void main(String[] args){ Scanner scanner =new
Scanner(System.in);
int player_num;
System.out.print("输入选手人数:"); player_num = scanner.nextInt();
年 月 日 实验项目:算法与程序
实验目的:
1、掌握算法、算法时间复杂度的基本计算和概念 2、利用统计数字问题、最多约数问题的练习,认识与了解算法与 程序的关系。
来自百度文库实验仪器:
PC机一台(装有VC c++ 6.0或JAVA)
实验内容及步骤(或程序清单): 实验内容:
一、实验题目 1.现有一系列{6,3,25,42,89,9,60,30},请用多种方法(至
}
public static void printArray(int[] array){ for(int i=0;i<array.length;i++){ System.out.printf("%-4d", array[i]); if(9 == i%10){ System.out.println(); } } System.out.println();
相关文档
最新文档