package cn.sdut.test;
import java.util.Arrays;
import java.util.Collections;
/*
* 数组排序操作
*/
public class Test01 {
public static void main(String[] args) {
int[] a = new int[] { 1,1, 4, 8, 3, 9, 32, 25, 65, 12, 35, 68 };
bubbleSort(a);
printArray(a);
reverse(a);
printArray(a);
selectionSort(a);
printArray(a);
reverse(a);
printArray(a);
quickSort(a, 0, a.length - 1);
printArray(a);
}
// 快速排序
private static void quickSort(int[] a, int begin, int end) {
int bpoint = begin;
int epoint = end;
int flag = a[begin];
while (bpoint < epoint) {
while (bpoint < epoint) {
if (a[epoint] < flag) {
a[bpoint] = a[epoint];
bpoint++;
break;
} else {
epoint--;
}
}
while (bpoint < epoint) {
if (a[bpoint] > flag) {
a[epoint] = a[bpoint];
epoint--;
break;
} else {
bpoint++;
}
}
}
int mid = (bpoint+epoint)/2;
a[mid] = flag;
if((mid-1)>begin){quickSort(a, begin, mid-1);}
if((mid+1)<end){quickSort(a, mid+1, end);}
}
public static void quicksort(int[] a,int low,int high){
// Arrays.sort(a);
int flag = a[low];//立一个标准
int l = low;//设立指针
int h = high;//设立指针
while(l<h){
//从右边找一个比flag小的数放在左边坑里
while(l<h){
if(a[h]<flag){
a[l] = a[h];
l++;
break;
}else{
h--;
}
}
//从左边找一个比flag大的数放在右边坑里
while(l<h){
if(a[l]>flag){
a[h] = a[l];
h--;
break;
}else{
l++;
}
}
}
//中间坑放flag
int mid = (l+h)/2;
a[mid] = flag;
if((mid-1)>low) quicksort(a, low, mid-1);
if((mid+1)<high) quicksort(a, mid+1, high);
}
// 选择则排序
private static void selectionSort(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
int index = i;
for (int j = i + 1; j < a.length; j++) {
if (a[index] > a[j]) {
index = j;
}
}
if (index != i) {
int t = a[index];
a[index] = a[i];
a[i] = t;
}
}
}
// 倒序
private static void reverse(int[] a) {
for (int begin = 0, end = a.length - 1; begin <= end; begin++, end--) {
int t = a[begin];
a[begin] = a[end];
a[end] = t;
}
}
// 冒泡
private static void bubbleSort(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - i - 1; j++) {
if (a[j] > a[j + 1]) {
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
}
// 数组打印
private static void printArray(int[] a) {
for (int i = 0; i < a.length; i++) {
if (i == a.length - 1) {
System.out.println(a[i]);
} else {
System.out.print(a[i] + " ");
}
}
}
}