public class MySort {
public static void bubbleSort(int []a) {
if(a==null || a.length<=1) return;
for(int i=0;i<a.length;i++) {
boolean flag =true;
for(int j=a.length-1;j>i;j--){
if(a[j-1]>a[j]){
int temp =a[j];
a[j] = a[j-1];
a[j-1] = temp;
flag = false;
}
}
if(flag) break;
}
}
//以左边为基准
public static int partition(int []arr,int low,int high) {
int index= arr[low];
while(low<high) {
while(low<high && arr[high]>index) high--;
if(low>=high) break;
arr[low] = arr[high];
while(low<high && arr[low]<index) low++;
if(low>=high) break;
arr[high] = arr[low];
}
arr[low] = index;
return low;
}
//快速排序 O(nlogn) O(logn) 不稳定
public static void quickSort(int []arr,int low,int high) {
if(low>=high) return;
int mid = partition(arr,low,high);
quickSort(arr,low,mid);
quickSort(arr,mid+1,high);
}
//归并排序 O(nlogn) O(1)
public static void merge(int[] arr,int start,int mid,int end,int[] temp){
int i = start , j = mid;
int m= mid+1, n = end;
int k=0;
while(i<=j && m<=n){
if(arr[i]<=arr[m])
temp[k++]=arr[i++];
else
temp[k++]=arr[m++];
}
while(i<=j){
temp[k++]=arr[i++];
}
while(m<=n){
temp[k++]=arr[m++];
}
for(i=0;i<k;i++) {
arr[start+i]=temp[i];
}
}
public static void mergeSort(int[] arr, int start, int end, int[] temp) {
if (start >= end)
return;
int mid = (start + end) / 2;
mergeSort(arr, start, mid, temp);
mergeSort(arr, mid + 1, end, temp);
merge(arr, start, mid, end, temp);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = {2,4,7,5,8,1,3,6};
int temp[] = new int[a.length];
// mergeSort(a,0,a.length-1,temp);
quickSort(a,0,a.length-1);
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
}
}