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的,也不是可以按字母顺序排序的。
我真的可以使用一些帮助,因为我不擅长对算法进行排序。时间的复杂性对我来说并不重要。
答案 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的答案),但这可能是最容易阅读的。