public class SortTest {
public static void main(String[] args)
{
int[] arr = {23, 45, 12, 8, 3, 2, 55, 34, 87, 21};
// buddleSort(arr);
// choiceSort(arr);
// insertSort(arr);
quickSort(0, arr.length - 1, arr);
printSort(arr);
}
// 冒泡排序 稳定
public static void buddleSort(int[] arr) {
int temp;
for (int i = arr.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j+ 1];
arr[j+1] = temp;
}
}
}
}
// 选择排序 不稳定
public static void choiceSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
int k = 0, j;
for (j = 0; j <= arr.length - i; j ++) {
if (arr[k] < arr[j])
k = j;
}
if (k != j) {
int temp = arr[k];
arr[k] = arr[j-1];
arr[j-1] = temp;
}
}
}
// 直接插入排序 稳定
public static void insertSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
int temp = arr[i], j;
for (j = i - 1; j >= 0; j--) {
if (arr[j] > temp) {
arr[j+1] = arr[j];
} else {
break;
}
}
arr[j+1] = temp;
}
}
// 快速排序 不稳定
public static void quickSort(int begin, int end, int[] arr) {
if (begin < end) {
int middle = quickOnce(begin, end, arr);
quickSort(begin, middle - 1, arr);
quickSort(middle + 1, end, arr);
}
}
public static int quickOnce(int begin, int end, int[] arr){
int flag = arr[begin];
while (begin < end) {
while (begin < end && arr[end] > flag) {
end--;
}
if (begin < end) {
arr[begin] = arr[end];
}
while(begin < end && arr[begin] < flag) {
begin ++;
}
if (begin < end) {
arr[end] = arr[begin];
}
}
arr[begin] = flag;
return begin;
}
// 数组打印
public static void printSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}