算法复杂度课后作业
2017-09-24 20:18
155 查看
算法复杂度课后作业
要求:
用 Java语言实现下列算法并进行单元测试, 请给出算法的时间复杂度。(1)求一个整数二维数组Arr
的所有元素之和。
(2)对于输入的任意 3 个整数, 将它们按从小到大的顺序输出。
(3)对于输入的任意 n 个整数, 输出其中的最大和最小元素。
解答:
1.运用双层循环,外层循环控制数组的行数,内层循环是下标,然后将其累加,最后返回结果。用到两个循环,而且循环中的变量的增长为1。因此,第一个问题的时间复杂度是: O(n^2)public int sum(int[][] Arr){ for (int i = 0; i < Arr.length; i++){ for (int j = 0; j < Arr[i].length; j++){ sum += Arr[i][j]; } } return sum; }
采用冒泡排序,时间复杂度是: O(n^2)
for (position = data.length - 1; position >= 0; position--) { for (scan = 0; scan <= position - 1; scan++) if (data[scan].compareTo(data[scan + 1]) > 0) swap(data, scan, scan + 1); }
使用桶排序,采用一个很大很大的数组,它的值就是它在数组中下标,之后将桶排序中的值取出来放入一个数组中,然后输出第一个坐标和最后一个坐标便可。时间复杂度是: O(n)
public static void bucketSort(int[] a, int max) { int[] buckets; if (a==null || max<1) return ; // 创建一个容量为max的数组buckets,并且将buckets中的所有数据都初始化为0。 buckets = new int[max]; // 1. 计数 for(int i = 0; i < a.length; i++) buckets[a[i]]++; // 2. 排序 for (int i = 0, j = 0; i < max; i++) { while( (buckets[i]--) >0 ) { a[j++] = i; } } buckets = null; } /----------------------------------- for (int i = 0; i < ae.length; i++){ if (ae[i] != 0){ aee1[s] = ae[i]; s++; } }
相关文章推荐
- 算法复杂度课后作业
- 十二章课后作业4
- string课后作业
- 课后作业5
- 数组求和与课后作业
- 课后作业
- 课后作业
- 软件工程 习题三 课后作业
- 课后作业01
- 软件工程课后作业一之30道随机四则运算程序2
- Github全面详解-07 课后作业02
- 【RFID第二次作业】课后习题第6题
- Linux运维笔记-课后作业-脚本执行多功能操作虚拟机
- 课后作业-登陆界面
- 课后作业1 书本32页 两题
- 课后笔记及作业
- WP7有约(二“.NET研究”):课后作业
- Deep Learning 课后作业笔记 | Course1 Week4 Part2
- 老男孩linux运维培训第十三次课后作业之读后感
- 课后作业 -团队项目编程进度