collection类默认使用的是归并排序或者及其变种
package cn;
import java.util.*;
public class SortCollection {
public static void main(String[] args) {
Integer[] demoList = new Integer[]{50, 12, 65, 43, 2, 13, 9, 7, 96, 15, 3};
SortCollection sortCollection = new SortCollection();
sortCollection.chooseSort(demoList);
sortCollection.bubbleSort(demoList);
sortCollection.insertSort(demoList);
sortCollection.quickSort(demoList);
}
public void chooseSort(Integer[] demoList) {
Integer[] target = deepCopy(demoList);
int temp;
for (int i = 0; i < target.length - 1; i++) {
temp = i;
for (int j = i + 1; j < target.length; j++) {
if (target[temp] > target[j]) {
temp = j;
}
}
int data = target[i];
target[i] = target[temp];
target[temp] = data;
}
printList(target);
}
public void bubbleSort(Integer[] demoList) {
Integer[] target = deepCopy(demoList);
int temp;
for (int i =0; i< target.length - 1; i++) {
for (int j = i + 1; j < target.length; j++) {
if (target[i] > target[j]) {
temp = target[j];
target[j] = target[i];
target[i] = temp;
}
}
}
printList(target);
}
public void insertSort(Integer[] demoList) {
Integer[] target = deepCopy(demoList);
for (int i=1;i<demoList.length;i++) {
int temp = target[i];
int index = i;
for (int j = i -1; j >=0; j--) {
if (temp < target[j]) {
target[j + 1] = target[j];
index--;
} else {
break;
}
}
target[index] = temp;
}
printList(target);
}
private void quickSort(Integer[] demoList) {
Integer[] target = deepCopy(demoList);
quickCompare(target, 0, target.length - 1);
printList(target);
}
private void quickCompare(Integer[] target, int start, int end) {
if (start > end) {
return;
}
Integer base = target[start];
int baseIndex = start;
int endIndex = end;
while (start < end) {
while (base <= target[end] && start < end) {
end--;
}
while (base >= target[start] && start < end) {
start++;
}
if (start < end) {
Integer temp = target[start];
target[start] = target[end];
target[end] = temp;
}
}
Integer temp = target[start];
target[start] = base;
target[baseIndex] = temp;
quickCompare(target, baseIndex, start - 1);
quickCompare(target, start + 1, endIndex);
}
public Integer[] deepCopy(Integer[] source) {
Integer[] target = new Integer[source.length];
System.arraycopy(source, 0, target, 0, source.length);
return target;
}
public void printList(Integer[] source) {
for (Integer integer : source) {
System.out.print(integer + ",");
}
System.out.println();
}
}