需要帮助通过代码排序整数数组

时间:2011-07-20 17:22:02

标签: java arrays sorting

我一直在研究在数组列表中对整数进行排序的代码,但我的代码只返回2个数字,任何人都可以帮助我理解我在这里做错了什么。如何显示所有数字?我的数组中的数字

  • ArrayList testNumbers = new ArrayList();
  • testNumbers.add(48);
  • 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 个答案:

答案 0 :(得分:5)

使用java.util.Collections.sort(List<T> list)。或者您是否需要实施自己的排序算法?

答案 1 :(得分:3)

如果仔细查看代码,如果您当前查看的数字不大于maxNumber,则无法执行任何操作。

它增加了48因为48&gt; 0.然后它丢弃3和23因为它们小于48.然后它增加99因为它大于48。

答案 2 :(得分:2)

我相信你想归档一个经典的选择排序。

也许尝试好的旧维基百科: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;
}

答案 3 :(得分:2)

基本上,您只添加的数字大于您看到的最大数字。您还需要考虑较小的数字,并妥善存储它们。

答案 4 :(得分:2)

当您查看的数组元素大于目前为止发现的最大数组时,您只会添加到sortedIntArray。因为到目前为止还没有找到,所以会添加48个。然后添加99因为它大于48。

答案 5 :(得分:2)

您需要多次传递数组。就目前而言,您正在做的是找到比数组中所有先前数字更大的每个数字。如果你真的只是想要一个选择排序(不是一个好主意,它很慢)你想要:

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);
}

这也会使您的数组从最大到最小,这不一定是您想要的。此外,通过从数字中删除,您将更改数组,以便在完成后无法使用它(除非您通过克隆)。通常,您需要重新考虑您的设置。

答案 6 :(得分:2)

你混合了几个分类策略

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;
}

答案 7 :(得分:1)

我猜你要这是一个家庭作业。如果您不只是使用以sort方法构建的任何托管语言,因为它将比您编写的任何内容都快。

答案 8 :(得分:1)

您在处理条目时删除条目。 这意味着插入条目时大小正在缩小。 添加两个条目后,您删除了两个条目,留下两个条目,以便循环停止。

答案 9 :(得分:1)

尝试这个算法它适用于类..你也可以将一个类列表插入其中

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());
        }
    }
}