java十大算法

java十大算法,第1张

算法一:快速排序算法

快速排序是由东尼·霍尔所灶饥猛发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

算法步骤:

1 从肢基数列中挑出一个元素,称为 "基准"(pivot),

2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition) *** 作。

3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在隐桥每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

算法二:堆排序算法

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

堆排序的平均时间复杂度为Ο(nlogn) 。

算法步骤:

创建一个堆H[0..n-1]

把堆首(最大值)和堆尾互换

3. 把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置

4. 重复步骤2,直到堆的尺寸为1

算法三:归并排序

归并排序(Merge sort,台湾译作:合并排序)是建立在归并 *** 作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

算法步骤:

1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置

3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

4. 重复步骤3直到某一指针达到序列尾

5. 将另一序列剩下的所有元素

算法帆茄不给了,又是这种组合,排列的问题。无聊

不过我换种方式解释一下楼主的意思:

有三个数字

1 (代表空串"")

2 (代表长度不为0的字符串"******")

3 (代表null引用)

要求在这三个数字选出N个出来组合 这种组合在数学上叫可重复组合 比如:

输入N=2时有组合

11

22

33

12

13

23

输出N=4时有组合

1111

2222

3333

1112

1113

。。。省略

对于N=4时,楼主的外层list就是所有的这些组合,内层list代表每种组合的具体内容

按上面N=4的例子,list.get(0)就是1111,list.get(0).get(0)就是1111这个组合的第一个1

不知道楼主要干嘛扒厅,本来求排列组合的算法就是非P算法了,还要嵌套list!有必要么?

我输个N=100,估计楼主等得不崩溃,你的电脑都崩溃了=。=如何可以,建议换个位运算算法春轿隐代替吧

尤其提示:可重复元素组合比不可重复元素组合的数量要多非常多

正确答案:AC。

【解析】这个题目考察了方法的返回值类型及return关键字的使用。一般情况下,方法由竖掘盯返回值时才使用return语句。且return语句中表达式的类型一定与方法的返回值类型保持一致。根据这个原则解析如下:

A:方法的返回值是String类型,return语句中表达式也是String,二者相符,故正确。

B:方法的返回值是void,即方法没有返回值(或返回值为空),可以不需要return语句,而且return语句中表达式是String,二者不符,故错误。

C:方法的返回值是String类型,return语句中表达式也是String,二者相符,故正确。

D:方法的返回值是int类型,而return语句中表达式是String,二者不余和符散槐,故错误。

综上所述,争取答案为AC。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12509393.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存