本文最后更新于 1107 天前,其中的信息可能已经有所发展或是发生改变。
冒泡排序 (Bubble Sort)
public void asc(List<Integer> list) {
for (int i = 0; i < list.size() - 1; i++) {
for (int j = 0; j < list.size() - i - 1; j++) {
if (list.get(j) > list.get(j + 1)) {
Integer tag = list.get(j);
list.set(j, list.get(j + 1));
list.set(j + 1, tag);
}
}
}
}
选择排序 (Insertion Sort)
public void asc(List<Integer> list) {
for (int i = 0; i < list.size() - 1; i++) {
int index = i;
for (int j = i + 1; j < list.size(); j++) {
if (list.get(index) > list.get(j)) {
index = j;
}
}
Integer tag = list.get(i);
list.set(i, list.get(index));
list.set(index, tag);
}
}
插入排序 (Selection Sort)
public void asc(List<Integer> list) {
for (int i = 1; i < list.size(); i++) {
for (int j = i; j > 0 && list.get(j) < list.get(j - 1); j--) {
Integer tag = list.get(j);
list.set(j, list.get(j - 1));
list.set(j - 1, tag);
}
}
}
快速排序 (Quick Sort)
public void asc(List<Integer> list) {
if (list == null || list.size() < 2) {
return;
}
int size = list.size();
int p = size - 1;
int left = 0;
int right = p - 1;
while (left < right) {
if (list.get(left) < list.get(p)) {
left++;
} else {
if (list.get(right) > list.get(p)) {
right--;
} else {
Integer tag = list.get(left);
list.set(left, list.get(right));
list.set(right, tag);
}
}
}
if (list.get(left) > list.get(p)) {
Integer tag = list.get(p);
list.set(p, list.get(left));
list.set(left, tag);
}
asc(list.subList(0, left + 1));
asc(list.subList(left + 1, size));
}
归并排序 (Merge Sort)
public void asc(List<Integer> list) {
if (list == null || list.size() < 2) {
return;
}
int size = list.size();
int mid = size / 2;
List<Integer> listA = list.subList(0, mid);
asc(listA);
List<Integer> listB = list.subList(mid, size);
asc(listB);
List<Integer> tag = new ArrayList<>(size);
int a = 0;
int b = 0;
while (a < listA.size() && b < listB.size()) {
if (listA.get(a) < listB.get(b)) {
tag.add(listA.get(a));
a++;
} else {
tag.add(listB.get(b));
b++;
}
}
if (a == listA.size()) {
tag.addAll(listB.subList(b, listB.size()));
} else if (b == listB.size()) {
tag.addAll(listA.subList(a, listA.size()));
}
for (int i = 0; i < tag.size(); i++) {
list.set(i, tag.get(i));
}
}
