import java.util.Arrays;
/**
* The Class Sort.
*/
public class Sort {
/**
* The main method.
*
* @param args
* the args
*/
public static void main(String[] args) {
int[] arrs = new int[] { 121, 32, 14, 125, 638, 119, 230, 469 };
bubbleSort(arrs.clone());
selectSort(arrs.clone());
insertSort(arrs.clone());
shellSort(arrs.clone());
System.out.println("quick sort start: ");
display(arrs);
display(quickSort(arrs.clone(), 0, arrs.length - 1));
System.out.println("quick sort end. ");
System.out.println("java arrays sort: ");
display(arrs);
Arrays.sort(arrs);
display(arrs);
System.out.println("java arrays sort end. ");
}
// 冒泡排序
// O(n^2) M(n^2)
/**
* Sort bubble.
*
* @param arrs
* the arrs
*/
public static void bubbleSort(int[] arrs) {
System.out.println("bubble sort start: ");
display(arrs);
int temp = 0;
for (int i = arrs.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (arrs[j] > arrs[j + 1]) {
temp = arrs[j];
arrs[j] = arrs[j + 1];
arrs[j + 1] = temp;
}
}
}
display(arrs);
System.out.println("bubble sort end. ");
}
// 选择排序
// O(n^2) M(n)
/**
* Sort select.
*
* @param arrs
* the arrs
*/
public static void selectSort(int[] arrs) {
System.out.println("select sort start: ");
display(arrs);
int min = 0;
int temp = 0;
for (int i = 0; i < arrs.length - 1; i++) {
min = i;
for (int j = i + 1; j < arrs.length; j++) {
if (arrs[min] > arrs[j]) {
temp = arrs[min];
arrs[min] = arrs[j];
arrs[j] = temp;
}
}
}
display(arrs);
System.out.println("select sort end. ");
}
// 插入排序
// O(n^2) M(n)
/**
* Sort insert.
*
* @param arrs
* the arrs
*/
public static void insertSort(int[] arrs) {
System.out.println("insert sort start: ");
display(arrs);
int temp = 0;
int t = 0;
for (int i = 1; i < arrs.length; i++) {
temp = arrs[i];
t = i;
while (t > 0 && arrs[t - 1] >= temp) {
arrs[t] = arrs[t - 1];
t--;
}
arrs[t] = temp;
}
display(arrs);
System.out.println("insert sort end. ");
}
// 希尔排序
// O(n^3/2) M(n)
/**
* Shell sort.
*
* @param arrs
* the arrs
*/
public static void shellSort(int[] arrs) {
System.out.println("shell sort start: ");
display(arrs);
int h = 0;
while (h <= arrs.length / 3) {
h = h * 3 + 1;
}
int temp = 0;
int outer = 0;
int inner = 0;
while (h > 0) {
for (outer = h; outer < arrs.length; outer++) {
temp = arrs[outer];
inner = outer;
while (inner > h - 1 && arrs[inner - h] >= temp) {
arrs[inner] = arrs[inner - h];
inner -= h;
}
arrs[inner] = temp;
}
h = (h - 1) / 3;
}
display(arrs);
System.out.println("shell sort end. ");
}
// 快速排序
// O(nlogn) M(logn)
/**
* Quick sort.
*
* @param arrs
* the arrs
* @param istart
* the istart
* @param iend
* the iend
*
* @return the int[]
*/
public static int[] quickSort(int[] pData, int left, int right) {
int i = left, j = right;
int middle, strTemp;
middle = pData[(left + right) / 2];
do {
while ((pData[i] < middle) && (i < right)) {
i++;
}
while ((pData[j] > middle) && (j > left)) {
j--;
}
if (i <= j) {
strTemp = pData[i];
pData[i] = pData[j];
pData[j] = strTemp;
i++;
j--;
}
} while (i <= j);
if (left < j) {
quickSort(pData, left, j);
}
if (right > i) {
quickSort(pData, i, right);
}
return pData;
}
/**
* Display.
*
* @param arrs
* the arrs
*/
private static void display(int[] arrs) {
StringBuffer buffer = new StringBuffer("the array is: ");
for (int i : arrs) {
buffer.append(i + ", ");
}
System.out.println(buffer.toString().substring(0, buffer.length() - 2));
}
}