参考文章:http://www.cnblogs.com/yangecnu/p/Introduction-Insertion-and-Selection-and-Shell-Sort.html
java代码:
public class Sort {
public static void main(String[] args) {
int[] array = { 3, 4, 2, 5, 1, 8 };
System.out.println("原数组:");
printArray(array);
System.out.println("选择排序后:小-》大");
selectionSort(array);
printArray(array);
// --------------------
System.out.println("选择排序后:大-》小");
selectionSort2(array);
printArray(array);
// --------------------
System.out.println("插入排序后:小-》大");
insertionSort(array);
printArray(array);
// --------------------
System.out.println("选择排序后:大-》小");
shellSort(array);
printArray(array);
}
// 选择排序小-》大
public static void selectionSort(int[] array) {
int length = array.length;
for (int i = 0; i < length; i++) {
int min = i;
for (int j = i + 1; j < length; j++) {
if (array[min] > array[j]) {
min = j;
}
}
swap(array, i, min);
}
}
// 选择排序大-》小
public static void selectionSort2(int[] array) {
int length = array.length;
for (int i = 0; i < length; i++) {
int max = i;
for (int j = i + 1; j < length; j++) {
if (array[max] < array[j]) {
max = j;
}
}
swap(array, i, max);
}
}
// 插入排序 小-》大
public static void insertionSort(int[] array) {
int length = array.length;
for (int i = 1; i < length; i++) {
for (int j = i; j > 0; j--) {
if (array[j] < array[j - 1]) {
swap(array, j, j - 1);
} else {
break;
}
}
}
}
// 希尔排序 大->小
public static void shellSort(int[] array) {
int n = array.length;
int h = 1;
while (h < n / 3)
h = h * 3 + 1;
while (h >= 1) {
for (int i = 1; i < n; i++) {
for (int j = i; j >= h; j = j - h) {
if (array[j] > array[j - h]) {
swap(array, j, j - h);
}
}
}
h /= 3;
}
}
public static void swap(int[] array, int i, int j) {
int t = array[i];
array[i] = array[j];
array[j] = t;
}
public static void printArray(int[] array) {
for (int a : array) {
System.out.print(a + " ");
}
System.out.println();
}
}