我需要将传入的整数值数组按递增顺序排序,但我不能使用任何现有的排序方法(因此没有Collections.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);
}
}
}
}
任何帮助将不胜感激!
答案 0 :(得分:1)
正如评论中的人所说,有多种排序算法。
这是我在大学时使用过的最简单的算法之一(但是使用字符串数组):
您可以修改它以使用列表。
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;
}
}
}
答案 1 :(得分:0)
这是一个shellort的示例,它不是最快或最好的排序算法,但会在一个小列表上完成工作。
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;
}
}
}
答案 2 :(得分:0)
这是selection sort。它是最简单的排序算法之一(比插入慢,但比泡沫更快)。它将列表中的每个元素与列表中的其余元素进行比较。该列表将从开始到结束逐步排序(从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