2014-03-28 57 views
0

我一直在试图解决这个问题,并陷入困境。问题的规格如下排序算法,插入排序

如果k是偶数,则k个数的中间值被定义为最小数目(k/2) ;并且如果k是 奇数,则第((k + 1)/ 2)个最小值。例如,4个数字的中位数:2 1 8 7是第2小的数字,即2,以及5 数字的中间数:2 1 8 7 6是第3小的数字,即6。 在这个问题中,会得到N个数字。假设第k个中值或m(k)被定义为第一个数的中值(1 < = k < = N)。即第5个 中位数或m(5)是前5个数字的中位数,第8个中位数或第8个中位数是前8个数字的中位数。换句话说,让Ai 表示第i个 号码,则第k个 中值或m(k)是 ,其定义为数字A1,A2,...,Ak的中值。你的任务是找到m(1)+ m(2)+ m(3)+ ... + m(n),输出模数和100000

所以基本上你必须读取数字,第一个数字存储在变量N中,并指示该点之后要读入多少个数字。 (这总是5)。然后,您必须遍历数字的读入,将它们存储在数组中,然后对它们进行排序,然后找到中间值的中间值,然后将值存储并重复,直到所有数字都被读入,排序并找到中值。

我已经设法读取数字,我可以在一定程度上对它们进行排序,但我的排序算法将它们排序为最高值和最小值,并且为了使程序正常运行以获得期望的输出我需要它是另一种方式,我不能弄清楚如何。

的数字读出会像这样

和答案应该是27

这是我的代码

在这个问题上的任何帮助将是惊人的,因为我只是兜兜在cirles,者均基于的System.out.println(myIntArray [4])等只是一个示踪器,看看排序是如何发生的

+0

为什么不简单地使用'Arrays.sort()'?另外,我不认为你应该先排序整个数组。这不会给你正确的答案。 –

+0

我被指示使用算法对其进行排序,而不是Java集合。 – user3025572

+0

我认为代码做的是给数组添加一个值,然后排序,然后从列表中添加下一个值,是不是这种情况? – user3025572

回答

0

你似乎正在整理整个数组每次通过。您需要在每次迭代时从0到i(排他)进行排序。而且,对于奇数长度,在计算下标时需要括号:myIntArray[(i+1)/2]而不是myIntArray[i+1/2]。由于运算符的优先级,Java会将后者评估为myIntArray[i+(1/2)],这只是myIntArray[i],因为1/2的整数除法为0。

+0

非常感谢,您整理了我的问题。加入括号后答案是正确的。现在正在制定如何加快整个程序以符合时间限制 – user3025572