使用java写代码,伪代码与老师PPT要求一致,有代码运行截图和时间复杂度分析,如果有误请及时评论。
实验时间 | 2024年 3 月27日19时至22时 | 学时数 | 3 | ||||
1.实验名称 蛮力与优化算法实验:题目1 排序问题程序设计整数排序问题 | |||||||
2.实验目的 题目1实验目的: (1)掌握选择排序和起泡排序的基本思想; (2)掌握两种排序方法的具体实现过程; (3)在掌握的基础上编程实现两种排序方法。 | |||||||
3.实验内容 输入一个待排序的序列,分别用选择排序和起泡排序两种排序方法将其变换成有序的序列,输出结果,输出时要求有文字说明。请任选一种语言编写程序实现上述算法,并分析其算法复杂度。 | |||||||
选择排序原理:通过自定义的最小值元素的下标,在内层循环中通过下标进行比较,查找过程中不移动数位置, 如果发现比自定义最小值元素下标还要小的值,则将该值的下标赋值给自定义的最小值元素下标。在一次内层循环结束后,将最小值元素交换至数组左端。 算法思想: A.在未排序序列中找到最小(大)元素,存放到排序序列的起始位置; ————————————————————————————————————— 起泡排序原理:从第一个数开始,依次往后进行相邻两个数之间的比较,如果前面的数比后面的数大就交换这两个数的位置,如果前面的数较小或两者一样大,就不作处理。 详细描述: ➀比较相邻的元素的大小。如果第一个比第二个大,就交换它们两个的顺序;
| |||||||
实验一(已经输入序列): 选择排序伪代码:
选择排序源代码(java版且从小到大排序): public class SelectSortMin { public static void main(String[] args) { int[] a = { 1, 8, 5, 16, 32, 21 }; int min;// 最小值下标 int temp; // 外层循环控制循环次数 for (int i = 0; i < a.length - 1; i++) { min = i;// 假设最小值是a[i],即a[0] //内层循环进行比较更新下标 for (int j = i + 1; j < a.length; j++) { if (a[j] < a[min]) // 如果有比现在制定的最小元素还小的,就更新最小值下标 min = j; } // 退出内层循环后,判断最小下标是否与原来相等,不等,说明有更小的,进行更新元素顺序 if (i != min) { // if (a[i] != a[min]) {// 也可以更改为这个 temp = a[min]; a[min] = a[i]; a[i] = temp; } } //输出最终结果 for (int i = 0; i < a.length; i++) System.out.print(a[i] + ","); } } 起泡排序伪代码:
起泡排序源代码(java版且从小到大排序):
选择排序时间复杂度分析: 选择排序的时间复杂度是O(N2):假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历多少次呢?N-1次因此,选择排序的时间复杂度是 O(N2) 。 起泡排序时间复杂度分析: 在冒泡排序中,第1轮需要比较n-1次,第2轮需要比较n-2次……第n-1轮需要比较1次,所以平均时间复杂度为:O( n2 ); | |||||||
实验一: 选择排序代码运行截图: 起泡排序代码运行截图: 心得: 对数据结构进行了复习。 |