我需要帮助重新排列此数组

时间:2020-01-04 02:02:21

标签: java arrays

String数组当前按奇数索引和偶数索引排序。

例如,让该数组形象化我的意思:{a,c,e,b,d,f}。 (索引0、2、4、1、3、5)。 我试图将数组重新排序为{a,b,c,d,e,f}的顺序。 (索引0、1、2、3、4、5)

它也必须适用于奇数的arrays.length。例如:{a,c,e,g,b,d,f}-> {a,b,c,d,e,f,g}长度= 7

此外,我试图将重点放在索引上,而不是字符串的实际含义上,因为在我的程序中,它们不仅是abc的,也不是可以按字母顺序排序的。

我真的可以使用一些帮助,因为我不擅长对算法进行排序。时间的复杂性对我来说并不重要。

2 个答案:

答案 0 :(得分:0)

创建一个相同长度的数组,然后使用两个计数器分两次复制:

for (idst=0, isrc=0; idst<length; idst+=2, isrc+=1) dst[idst] = src[isrc];
for (idst=1, isrc=length/2; idst<length; idst+=2, isrc+=1) dst[idst] = src[isrc];

重要的是,一个计数器以2计数,另一个计数器以1计数。

答案 1 :(得分:-1)

我不确定您使用的是哪种语言,因此我将用Java编写它,以便将其简化为其他语言。

//import java.util.Arrays;

public static String[] unscramble(String[] scrambledStrArr){
   String[] unscramble = new String[scrambledStrArr.length];
   String[] evens = Arrays.copyOfRange(scrambledStrArr, 0, scrambledStrArr.length/2); // note that we can use int truncation here to our benefit
   String[] odds = Arrays.copyOfRange(scrambledStrArr, (scrambledStrArr.length/2)+1, scrambledStrArr.length);
   int evensIndex = 0, oddsIndex = 0;
   for(int i = 0; i < unscramble.length; i++;){
      if(i%2==0){
         unscramble[i] = evens[evensIndex];
         evensIndex++;
      } else {
         unscramble[i] = evens[oddsIndex];
         oddsIndex++;
      }
   }
} 

请注意,肯定有更有效的方法(请看aksommerville的答案),但这可能是最容易阅读的。