快速排序
public void sortQuick(int[] arr,int l ,int r){
if(l>=r) return;
int mid = arr[(l+r)/2];
int i = l-1;
int j = r+1;
while(i<j){
do{i++}; while(arr[i]<mid);
do{j--};while(arr[j]>mid);
if(i<j){
swap(arr[i],arr[j]);
}
}
sortQuick(arr,l,j);
sortQuick(arr,j+1,r);
}
归并排序
public void merge(int[] arr,int l,int r){
if(l>=r) return;
int mid = (l+r)/2;
merge(arr,l ,mid);
merge(arr,mid+1,r);
int k =0, i =l, j =mid+1;
int[] temp = new int[r-l+1];
while(i<=mid&&j<=r){
if(arr[i]<=arr[j]) temp[k++] =arr[i++];
else temp[k++] =arr[j++];
}
while(i<=mid){
temp[k++] =arr[i++];
}
while(j<=r){
temp[k++] =arr[j++];
}
for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];
}
堆排序
int size;
public void down(int u){
int t = u;
if(u*2+1<size&&arr[u*2+1]<arr[t]) t=u*2+1;
if(u*2+2<size&&arr[u*2+2]<arr[t]) t=u*2+2;
if(u!=t){
swap(arr,u,t);
down(t);
}
}
public void heap(){
int n = arr.length;
int m = arr.length; //打印前m个
size=n;
for(int i=(size-1)/2;i>=0;i--) down(i);
while (m-->0){
System.out.println(arr[0]);
arr[0] =arr[size-1];
size--;
down(0);
}
}