快速排序是由东尼·霍尔所灶饥猛发展的一种排序算法。在平均状况下,排序 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。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)