-1

我有一个排序问题。

假设我有 4 个字符串存储在一个数组中,其中我想成对生成所有组合。并从这些对中对它们进行排序,以便没有 2 个数组位置在最大范围内相互连接

例子:

String[] array = {"one", "two", "three", "four"};

// want to generate

one - two
one - three
one - four
two - three
two - four
three - four

// then sort

one - two
three - four
one - four
two - three      //two "three" after each other
one - three
two - four

(在这种情况下,一个接一个地得到 2 的那个"three"在排序时也太随机了)

我不知道如何在 Java 中做到这一点。尝试嵌套 for 循环,有些人告诉我递归循环。而且我不想要:

只需复制粘贴这段代码,一切都会好起来的”我真的很想了解如何编写这样的东西。

我应该如何解决这个问题?

4

2 回答 2

5

这是你的不Just copy paste this code and everything will work:-

第 1 步: - 将临时变量初始化为0.

第 2 步: - 从到迭代您的数组0arr.length - temp

第 3 步: - 打印arr[i][temp] - arr[i][i + temp]

temp第 4 步:- 增量1

第 5 步: - 重复step 2if temp < arr.length - 1, as(i + temp)不能超过arr.length

因此,对于给定的数组,它将打印: -

String arr[] = {"one", "two", "three", "four"};

第一次迭代(差异为 1 的索引对):-

1. arr[0][0] - arr[0][1], then ("one" - "two")
2. arr[0][1] - arr[0][2],      ("two" - "three")
.. so on, 

然后进入下一次迭代。增加温度1: -

第二次迭代(具有差异 2 的索引对):-

1. arr[0][0] - arr[0][2], then  ("one" - "three")
2. arr[0][1] - arr[0][3]        ("two" - "four")

.. 很快。

最后一次迭代(有差异的索引对arr.length - 1):-

1. max = arr.length - 1;
2. arr[0][0] - arr[0][max]      ("one" - "four")

所以,你可以看到,这里没有任何sorting涉及的内容。如果您尝试通过排序来做到这一点,那将会非常复杂。

于 2012-11-20T21:17:35.457 回答
0

首先提出一个算法。它不必为它设置特定的语言。这只是你自己解决问题的方式。

然后将其翻译到计算机上。

这里有一些伪代码可以帮助您入门。

public pair[] getPairs(string[] arr)
{

    pair[] retval;
    foreach(string s in arr)
    {
        string first = arr.first
        foreach(string s2 in arr.subArray(allbutfirst))
        {
             retval.Add(newPair(s, s2)
        }
    }
}
于 2012-11-20T21:21:56.180 回答