我一直在研究在数组列表中对整数进行排序的代码,但我的代码只返回2个数字,任何人都可以帮助我理解我在这里做错了什么。如何显示所有数字?我的数组中的数字
[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]
答案 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());
}
}
}