gpt4 book ai didi

java - 排序算法不起作用

转载 作者:行者123 更新时间:2023-12-02 07:42:16 26 4
gpt4 key购买 nike

当我将对象添加到我的泛型类时(我使用的是字符串),我需要按升序排序。

我正在使用选择排序,但它不起作用。

我不知道这是否是正确的方法,所以非常感谢您的意见。

订单集类

public class OrderSet<T extends Comparable> implements Set<T> {

private T[] items;
private int size;

public OrderSet()
{
items = (T[]) new Comparable[5];
}

@Override
public void add(T s)
{
if(size >= items.length)
{
items = grow(items);
}

for(int i = 0; i < items.length; i++)
{
if(items[i] == null)
{
items[i] = s;
size++;
break;
}
}

if(size > 1)
{
for (int i = 0; i < size-1; i++)
{
for(int j = 1; j < size; j++)
{
T tmp;
if (items[i].compareTo(items[j]) > 0)
{
tmp = items[i];
items[i] = items[j];
items[j] = tmp;
}
}
}
}
}

@Override
public void show()
{
for(T a : items)
{
if(a != null)
System.out.print(a+", ");
}
}

public T[] grow(T[] a)
{
T[] newA = (T[]) new Comparable[a.length+5];
System.arraycopy(a, 0, newA, 0, a.length);
return newA;
}

}

主要

public class Main {

public static void main(String[] args) throws IOException
{
OrderSet<String> s1 = new OrderSet<>();
WordCount s2 = new WordCount();

Scanner input = new Scanner("the boy plays in the park with dog");
while (input.hasNext())
{
String w = input.next();
s1.add(w);
}

s1.show();

System.out.println();
}
}

最佳答案

我认为你的排序算法是错误的。 Ardentsonata 是对的,你使用了冒泡排序算法,但是有一个错误:

for (int i = 0; i < size-1; i++) {
for(int j = 1; j < size; j++){
T tmp;
if (items[i].compareTo(items[j]) > 0) {
tmp = items[i];
items[i] = items[j];
items[j] = tmp;
}
}
}

问题是第二个循环的起始值,您想要检查是否有任何其他元素 - 除了您已经排序的元素之外,是否大于您目前要排序的元素。所以你的第二个循环需要这个头:

for(int j = (i+1); j < size; j++)

所以你确实对数组进行了排序。

否则,您将无法控制地切换值,因为在将某些内容切换到第二个插槽后,您会在下一次迭代中将其切换回来。

希望有帮助!

关于java - 排序算法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11423044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com