如何在不使用内置库方法的情况下对ArrayList进行排序? (Java)

问题描述 投票:0回答:3

我需要编写一个方法来按升序对 ArrayList 进行排序,而不使用任何内置库或方法(不包括

java.util.ArrayList
,它可用于允许 ArrayList,但仅此而已)。我的代码接近完整,但
.remove()
功能似乎不起作用;它什么也不做,并且 ArrayList 最终成为 ArrayList 整个大小中重复的最小元素。我尝试用更新段为
tempDataCopy.remove(smallestElementIndex)
的 for 循环替换 while 循环,但它给出了多个错误,称 .remove() 函数具有“未知来源”。我该如何解决这个问题?

    public static ArrayList<Integer> sortUp(ArrayList<Integer> data) {
    ArrayList<Integer> increasingArray = new ArrayList<Integer>();
    ArrayList<Integer> tempDataCopy = data;// tempDataCopy was created so that elements may be deleted without affecting the actual ArrayList data
    int smallestElement = tempDataCopy.get(0);
    int smallestElementIndex = 0;
    while (tempDataCopy.size() > 0) {
        for (int i = 0; i < tempDataCopy.size(); i++) {
            if (tempDataCopy.get(i) < smallestElement) {
                smallestElement = tempDataCopy.get(i);
                smallestElementIndex = i;
            } // end if statement
        } // end for loop
        increasingArray.add(smallestElement);
        tempDataCopy.remove(smallestElementIndex);
    } // end while loop
    return increasingArray;
}// end sortUp

抱歉,如果这是重复的,我搜索了几个小时,但找不到类似排序的另一个示例。

java arraylist
3个回答
0
投票

您必须删除此代码并将其放入 if 条件中。

increasingArray.add(smallestElement);
tempDataCopy.remove(smallestElementIndex);

0
投票
public static ArrayList<Integer> sortUp(ArrayList<Integer> data) {
  ArrayList<Integer> increasingArray = new ArrayList<Integer>();
  ArrayList<Integer> tempDataCopy = new ArrayList<>(data);// tempDataCopy was created so that elements may be deleted without affecting the actual ArrayList data

  // moved initialization of smallestElement in while loop
  while (tempDataCopy.size() > 0) {
    int smallestElement = tempDataCopy.get(0);
    int smallestElementIndex = 0;
    for (int i = 1; i < tempDataCopy.size(); i++) {
        if (tempDataCopy.get(i) < smallestElement) {
            smallestElement = tempDataCopy.get(i);
            smallestElementIndex = i;
        } // end if statement
    } // end for loop
    increasingArray.add(smallestElement);
    tempDataCopy.remove(smallestElementIndex);     
  } // end while loop
  return increasingArray;
}// end sortUp

这会在每次 while 循环迭代时将最小元素重置为第一个元素。此示例发生了您的错误:4,3,2,1。

在 while 循环的第一次迭代之后,您的 tempDataCopy 看起来像这样:4,3,2

但是你的最小元素仍然是 1,并且你在下一次迭代中找不到更小的值。因此,您再次添加 1 并尝试删除索引 3 处的元素,该元素不再存在

关于您的错误,我不认为错误表明删除方法未知,而是要删除的元素不存在。


0
投票
import java.util.*;

public class listSort {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(3);
        list.add(1);
        list.add(5);
        list.add(8);
        list.add(2);
        list.add(7);

        System.out.println("Original list is " + list);

        for (int i = 0; i < list.size() - 1; i++) {
            int min = i;
            for (int j = i + 1; j < list.size(); j++) {
                if (list.get(j) < list.get(min)) {
                    min = j;
                }
            }
            // Swap the found minimum element with the first element
            int temp = list.get(min);
            list.set(min, list.get(i));
            list.set(i, temp);
        }

     System.out.print("Sorted Arraylist is "+list)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.