2013-10-03 3 views
-2

Я пытаюсь объединить два независимо отсортированных массива для создания одного массива, отсортированного по возрастанию. Вот что у меня есть до сих пор:Слияние двух массивов строк в Java

public static String [] mergeStrings(String [] x, String [] y) { 
    String[] result = new String[x.length + y.length]; 
    int largest = (x.length > y.length) ? x.length : y.length; 

    for (int i = 0; i < largest; i++){ 

    } 
} 

Любое направление отсюда было бы замечательным. Спасибо!

+0

Что самое большое для? – hasan83

+0

Почему бы не использовать 'Arrays.sort'? – chrylis

+0

Вам понадобится какой-то бинарный алгоритм поиска/сортировки, чтобы определить индекс наилучшего местоположения для размещения каждого элемента в новом массиве, предполагая, что вы не хотите просто добавлять один массив к другому и сортировать результат ... – MadProgrammer

ответ

-3
for (int i = 0, j = 0, k = 0; i < x.length || j < y.length; k++){ 
    if (j==y.length || (i!=x.length && x[i].compareTo(y[j]) <= 0) 
     result[k] = x[i++]; 
    else 
     result[k] = y[j++]; 
} 
+7

Хотя это то, что учитель OP хочет, чтобы ученики достигли, нам не нужно давать прямой ответ на домашние задания , –

+0

Это работает, спасибо Хасан. –

+1

-1 Да, это правильный ответ, но неправильно отвечать на вопрос о домашнем задании с помощью фактического кода. –

-1

См. Комментарии ниже.

public static String [] mergeStrings(String [] x, String [] y) { 
    //You declared the array that has enough size to wraph both x and y arrays. Good. 
    String[] result = new String[x.length + y.length]; 

    // get the size of the bigger array? 
    int largest = (x.length > y.length) ? x.length : y.length; 

    //If x.length is bigger, this will iterate x.length times, y.length otherwise.. 
    for (int i = 0; i < largest; i++){ 
    //even if you used result[i]=x[i] you would be missing elements for y. 
    } 
} 

Я думаю, что вы пытаетесь сделать что-то вроде этого:

public static String[] mergeStrings(String[] x, String[] y) { 
    //Declare the result string with the sum of sizes. 
    String[] result = new String[x.length + y.length]; 
    //Assign `x` values to result. 
    for (int i = 0; i < x.length; i++) { 
     result[i] = x[i]; 
    } 

    //Assign `y` values to result. Using resultIndex to start on the first empty position while `i` will be the index for the `y` array. 
    for (int i = 0, resultIndex = x.length; i < y.length; i++, resultIndex++) { 
     result[resultIndex] = y[i]; 
    } 
    return result; 
    } 
0

Если вы хотите, слияние подрезать дубликатов, а также

System.out.println(Arrays.toString(mergeStrings(// "5" repeats 
     new String[] {"1", "5", "8"}, new String[] {"2", "5", "6", "9"}))); 

public static String [] mergeStrings(String [] x, String [] y) { 
    List<String> mergedList = new ArrayList<String>(); 
    int xp = 0, yp = 0; 
    while (xp < x.length && yp < y.length){ 
     if (x[xp].compareTo(y[yp]) < 0) { 
      mergedList.add(x[xp++]); 
     } else if (x[xp].compareTo(y[yp]) > 0) { 
      mergedList.add(y[yp++]); 
     } else { 
      mergedList.add(x[xp]); 
      xp++; yp++; 
     } 
    } 
    while (xp < x.length) { 
     mergedList.add(x[xp++]); 
    } 
    while (yp < y.length) { 
     mergedList.add(y[yp++]); 
    } 
    return mergedList.toArray(new String[0]); 
} 

Выход:

[1, 2, 5, 6, 8, 9] 
Смежные вопросы