我需要将传入整数值的数组分类为增加的顺序,但是我不能使用任何现有的排序方法(因此没有collections.sort.sort(array))。
public void insert(Integer value) {
for (int i = 0; i < array.size(); i++) {
array.add(value);
}
}
这可能是我的复杂和失败的尝试。
for (int i = 0; i < array.size(); i++) {
array.add(value);
}
if(array.size() >= 2) {
value2 = array.get(0);
for(int j = 0; j < array.size(); j++) {
if(j != 0) {
if(value2 < array.get(j)) {
array.set(0, array.get(j));
array.set(j, value);
}
}
}
}
任何帮助将不胜感激!
正如人们所说的那样,有多种排序算法。
这是我在大学中使用的最简单算法之一(但此使用字符串数组):
您可以将其修改以使用列表。
String temp = "";
for(int i = 0, len = array.length; i < len; i++)
{
for(int j = i + 1; j < len; j++)
{
if(array[i].compareTo(array[j]) > 0)
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
这是Shellsort的一个示例,它不是最快或最佳排序算法,但会在小列表中完成工作。
public void sort(Integer[] values)
{
for (int gap = values.length / 2; gap > 0;
gap = gap == 2 ? 1 : (int) (gap / 2.2) )
{
for (int i = gap; i < values.length; i++)
{
Integer tmp = values[i];
int j = i;
for (; j >= gap && tmp.compareTo(values[j-gap]) < 0; j -= gap)
{
a[j] = a[j - gap];
}
a[j] = tmp;
}
}
}
http://en.wikipedia.org/wiki/shellsort
这是一种选择。这是最简单的排序算法之一(比插入慢,但比气泡快)。它将列表中的每个元素与列表中的其余元素进行比较。该列表将从开始到结尾逐渐排序(以i = 0
开始)。
i
正在与列表中的所有其他元素(j
)进行比较,当发现i
索引处的该值大于j
索引的值时,值交换并继续进行比较。
public static ArrayList<Integer> selectionSort(ArrayList<Integer> array) {
for (int i = 0; i < array.size() - 1; i++)
{
for (int j = i + 1; j < array.size(); j++)
{
if (array.get(i) > array.get(j)) {
int temp = array.get(j);
array.set(j, array.get(i));
array.set(i, temp);
}
}
}
return array;
}
我将在这里进行测试:
public static void main(String args[])
{
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(2);
list.add(5);
list.add(1);
list.add(7);
list.add(19);
list.add(4);
list.add(1);
list = selectionSort(list);
for (int i : list) {
System.out.println(i);
}
}
输出:
1
1
2
4
5
7
19