import java.util.Arrays;
/**
* 排序程序
* @author VINCENT
*
*/
public class SortTest {
public static void main(String[] args) {
int[] arr = { 2, 1, 44, 4, -5, 106, 79, 45, -9, 0 };
System.out.println("Arrays的静态方法sort()排序:");
arraysSort(arr);
System.out.println("\n冒泡排序:");
maoPao(arr);
System.out.println("\n选择排序:");
xuanZePaiXu(arr);
System.out.println("\n插入排序:");
chaRu(arr);
System.out.println("\n希尔排序:");
shell(arr);
}
// 希尔排序
public static void shell(int[] arr) {
// 分组
for (int increment = arr.length / 2; increment > 0; increment /= 2) {
// 每个组内排序
for (int i = increment; i < arr.length; i++) {
int temp = arr[i];
int j = 0;
for (j = i; j >= increment; j -= increment) {
if (temp < arr[j - increment]) {
arr[j] = arr[j - increment];
} else {
break;
}
}
arr[j] = temp;
}
}
for (int i : arr) {
System.out.print(i + " ");
}
}
// 插入排序
public static void chaRu(int[] arr) {
for (int i = 1; i < arr.length; i++) {// i从一开始,因为第一个数已经是排好序的啦
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
for (int i : arr) {
System.out.print(i + " ");
}
}
// 选择排序
public static void xuanZePaiXu(int[] arr) {
for (int i = 0; i < arr.length; i++) {
int lowerIndex = i;
// 找出最小的一个索引
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[lowerIndex]) {
lowerIndex = j;
}
}
// 交换
int temp = arr[i];
arr[i] = arr[lowerIndex];
arr[lowerIndex] = temp;
}
for (int i : arr) {
System.out.print(i + " ");
}
}
// Arrays的静态方法sort()排序
public static void arraysSort(int[] arr) {
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
// 冒泡排序
public static void maoPao(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}