Использование для цикла для сортировки строк - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь использовать два цикла for для сортировки списка строк по алфавиту.

В частности, мне не разрешено использовать java.util.Collections.sort().

for(int i = 0; i < str.size(); i++)
{
    for (int j = i+1; j < str.size(); j++)
    {
        if(str.get(i).compareTo(str.get(j))< 0)
        {
            String temp;
            str.add(temp);
            str.set(str.get(temp),str.get(i));
            str.set(i, str.get(j));
        }
    }
}

Вот что у меня естьдо сих пор.Идея в том, что он может работать с любым списком.Основная проблема, которую я продолжаю получать, заключается в том, как добавить временную строку, чтобы сохранить данные в i и j.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Вы не хотите добавлять временную строку в сортируемый вами массив - вы должны использовать ее для замены двух значений:

String temp = str.get(i);
str.set(i, str.get(j)); // this overwrites str.get(i),
                        // hence the need for temp
str.set(j, temp);

Кроме того, то, что вы делаете, на самом деле не пузырьковаяsort: -)

В Википедии есть хорошие статьи о самых распространенных алгоритмах / проблемах, и это отличный ресурс для начала с программирования, например, https://en.wikipedia.org/wiki/Bubble_sort

Добро пожаловать в группу программистов!

0 голосов
/ 09 октября 2018

Вот код.Приятно видеть, что вы попробовали что-то самостоятельно, прежде чем приехать сюда.Есть и другие методы сортировки, которые быстрее, чем Bubble Sort.Пожалуйста, попробуйте их, если это возможно.

List<String> str = new ArrayList<>();
    str.add("bbbb");
    str.add("aaaa");
    str.add("cccc");

    for(int i = 0; i < str.size(); i++)
    {
        for (int j = i+1; j < str.size(); j++)
        {
            if(str.get(i).compareTo(str.get(j))< 0)
            {

                String temp = str.get(i);
                str.set(i, str.get(j));
                str.set(j, temp);

            }
        }
    }

    System.out.println(str);  //this will print cccc,bbbb,aaaa
...