package com.ma;//归并
import java.util.Arrays;
public class MergeSort {
public static void mergeSort(int[] a){
int[] result = merge(a);
for (int i = 0; i < a.length; i++) {
a[i] = result[i];
}
}
public static int[] merge(int[] a){
if(a.length == 1)
return a;
int mid = a.length/2;
int[] left = Arrays.copyOfRange(a,0,mid);
int[] right = Arrays.copyOfRange(a,mid,a.length);
return sort(merge(left),merge(right));
}
private static int[] sort(int[] left, int[] right){
int[] result = new int[left.length+right.length];
int leftPointer = 0;
int rightPointer = 0;
for (int i = 0; i < result.length; i++) {
if(leftPointer == left.length){
result[i] = right[rightPointer++];
continue;
}
if(rightPointer == right.length){
result[i] = left[leftPointer++];
continue;
}
if(left[leftPointer] <= right[rightPointer]){
result[i] = left[leftPointer++];
}else{
result[i] = right[rightPointer++];
}
}
return result;
}
}
快排
快排
public static void quickSort(int[] a) {
sort(a, 0, a.length - 1);
}
private static void sort(int[] a , int start ,int end){
if(start == end){
return;
}
int pivot = a[start];
int leftPointer = start;
int rightPointer = end;
while(leftPointer != rightPointer){
while(leftPointer < rightPointer && a[rightPointer] >= pivot){
rightPointer--;
}
while (leftPointer < rightPointer && a[leftPointer] < pivot){
leftPointer++;
}
if(leftPointer < rightPointer){
Util.swap(a,leftPointer,rightPointer);
}
}
Util.swap(a,start,leftPointer);
sort(a,start,leftPointer);
sort(a,leftPointer+1,end);
}



