您的位置:首页 > 其它

算法复杂度课后作业

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++;
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: