Нужна помощь в сортировке целочисленного массива через код - PullRequest
0 голосов
/ 20 июля 2011

Я работал над кодом для сортировки целых чисел в списке массивов, но мой код возвращает только 2 числа, кто-нибудь может мне помочь понять, что я здесь делаю неправильно. Как мне получить все цифры для отображения? Числа в моем массиве

  • ArrayList testNumbers = new ArrayList ();
  • testNumbers.add (48); * +1006 *
  • testNumbers.add (3);
  • testNumbers.add (23);
  • testNumbers.add (99);

[48,3,23,99]. Любая помощь будет принята с благодарностью.

public ArrayList<Integer> listSort(ArrayList<Integer> numbers) {

    // create variable to store max number
    int maxNumber = 0;

    // creates an array that will store the sorted numbers
    ArrayList<Integer> sortedIntArray = new ArrayList<Integer>();

    // loops through each number in the numbers arraylist
    for (int i = 0; i < numbers.size(); i++) {

        if (numbers.get(i) > maxNumber) {
            // set the number to the new max number
            maxNumber = numbers.get(i);

            // add current max number to sorted array
            sortedIntArray.add(maxNumber);

            // remove the max number from numbers array
            numbers.remove(numbers.get(i));

        }
    }



    return sortedIntArray;
}

// sortedIntArray возвращает [48,99]

Ответы [ 10 ]

5 голосов
/ 20 июля 2011

Используйте java.util.Collections.sort(List<T> list). Или вам нужно реализовать собственный алгоритм сортировки?

3 голосов
/ 20 июля 2011

Если вы внимательно посмотрите на свой код, он ничего не сделает, если номер, на который вы сейчас смотрите, не больше maxNumber.

Он добавляет 48, потому что 48> 0. Затем онсбрасывает 3 и 23, потому что они меньше, чем 48. затем он добавляет 99, потому что это больше, чем 48.

2 голосов
/ 20 июля 2011

вы смешали несколько сортировочных лент

public ArrayList<Integer> listSort(ArrayList<Integer> numbers) {

    // create variable to store max number
    int maxNumber = 0;

    // creates an array that will store the sorted numbers
    ArrayList<Integer> sortedIntArray = new ArrayList<Integer>();

    // loops through each number in the numbers arraylist
    while (!numbers.isEmpty()) {
        int i;
        for(i=0;i<number.size();i++){//double loop to get the current max numbers
            if (numbers.get(i) > maxNumber) {
                // set the number to the new max number
                maxNumber = numbers.get(i);
            }
        }
        // add current max number to sorted array
        sortedIntArray.add(maxNumber);
        // remove the max number from numbers array
        number.listIterator(i).remove();
        maxNumber=0;//reset maxNumber
        }
    }



    return sortedIntArray;
}
2 голосов
/ 20 июля 2011

Вам необходимо пройти через массив более одного раза. В сущности, то, что вы делаете, находит каждое число больше, чем все предыдущие числа в массиве. Если вы действительно просто ищете сортировку выбора (не очень хорошая идея, она довольно медленная), вам нужно:

int size = numbers.size();
for (int i = 0; i < size; i++)
{
    int maxNumber = 0;
    for (int j = 0; j < numbers.size(); j++)
    {
        if (numbers.get(j) > numbers.get(maxNumber))
            maxNumber = j;
    }
    SortedIntArray.add(numbers.get(maxNumber));
    numbers.remove(maxNumber);
}

Это также возвращает ваш массив от наибольшего к наименьшему, что не обязательно то, что вы хотите. Кроме того, удаляя из чисел, вы изменяете массив, так что он не будет доступен вам, когда вы закончите (если вы не передадите клон). В общем, вам нужно переосмыслить настройки.

2 голосов
/ 20 июля 2011

Вы добавляете в sortedIntArray только тогда, когда элемент массива, на который вы смотрите, больше, чем самый большой из найденных на данный момент. 48 добавляется, потому что вы еще не нашли. Затем добавляется 99, потому что это больше, чем 48.

2 голосов
/ 20 июля 2011

По сути, вы только добавляете числа, которые превышают максимальное число, которое вы видели. Вам также необходимо учитывать меньшие числа и хранить их соответствующим образом.

2 голосов
/ 20 июля 2011

Полагаю, вы хотите заархивировать классическую сортировку выбора.

Возможно, попробуйте старую старую википедию: http://en.wikipedia.org/wiki/Selection_sort

public ArrayList<Integer> listSort(ArrayList<Integer> numbers) {

    // create variable to store max number
    int maxNumber = 0;

    // creates an array that will store the sorted numbers
    ArrayList<Integer> sortedIntArray = new ArrayList<Integer>();

    // loops through each number in the numbers arraylist
    for (int i = numbers.size(); i > 0; i--) {
        maxNumber = numbers.get(0);
        for(int j = 0; j < numbers.size(); j++) {
            if (numbers.get(j) > maxNumber) {
                // set the number to the new max number
                maxNumber = numbers.get(i);
            }
        }
        // add current max number to sorted array
        sortedIntArray.add(maxNumber);

        // remove the max number from numbers array
        numbers.remove(numbers.get(i));

        // add current max number to sorted array
        sortedIntArray.add(maxNumber);
    }
    return sortedIntArray;
}
1 голос
/ 18 декабря 2012

попробуйте этот алгоритм, он работает с классами .. вы также можете включить в него список классов '

package drawFramePackage;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;
import java.util.ListIterator;
import java.util.Random;
public class QuicksortAlgorithm {
    ArrayList<AffineTransform> affs;
    ListIterator<AffineTransform> li;
    Integer count, count2;
    /**
     * @param args
     */
    public static void main(String[] args) {
        new QuicksortAlgorithm();
    }
    public QuicksortAlgorithm(){
        count = new Integer(0);
        count2 = new Integer(1);
        affs = new ArrayList<AffineTransform>();
        for (int i = 0; i <= 128; i++){
            affs.add(new AffineTransform(1, 0, 0, 1, new Random().nextInt(1024), 0));
        }
        affs = arrangeNumbers(affs);
        printNumbers();
    }
    public ArrayList<AffineTransform> arrangeNumbers(ArrayList<AffineTransform> list){
        while (list.size() > 1 && count != list.size() - 1){
            if (list.get(count2).getTranslateX() > list.get(count).getTranslateX()){
                list.add(count, list.get(count2));
                list.remove(count2 + 1);
            }
            if (count2 == list.size() - 1){
                count++;
                count2 = count + 1;
            }
            else{
            count2++;
            }
        }
        return list;
    }
    public void printNumbers(){
        li = affs.listIterator();
        while (li.hasNext()){
            System.out.println(li.next());
        }
    }
}
1 голос
/ 20 июля 2011

Вы удаляете записи по мере их обработки. Это означает, что размер уменьшается при вставке записей. После добавления двух записей вы удалили две записи, оставив две записи, поэтому цикл останавливается.

1 голос
/ 20 июля 2011

Полагаю, вы спрашиваете это как домашнее задание. Если вы используете не только управляемые языки, встроенные в метод сортировки, так как это будет быстрее, чем все, что вы пишете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...