//堆排序
public void findMax(int[] array,int len,int index){
int left=2*index+1;
int right=2*index+2;
int large=index;
if(left<len&&array[left]>array[index]) large=left;
if(right<len&&array[right]>array[large]) large=right;
if(large!=index){
int temp=array[large];
array[large]=array[index];
array[index]=temp;
findMax(array,len,large);
}
}
public void creatHeap(int[] array){
int len=array.length;
int index=len/2;
for(int i=index;i>=0;i--){
findMax(array,len,i);
}
}
public void heapSort(int[] array){
int len=array.length;
creatHeap(array);
for(int i=len-1;i>0;i--){
int temp=array[i];
array[i]=array[0];
array[0]=temp;
findMax(array,i,0);
}
}
//歸併
public void mergeSort(int[]s,int start,int end){
if(start==end) return;
else{
int mid=(start+end)/2;
mergeSort(s,start,mid);
mergeSort(s,mid+1,end);
merge(s,start,mid+1,end);
}
}
private void merge(int[] s, int start, int i, int end) {
// TODO Auto-generated method stub
int end1=i-1;
int sta=start;
int[] temp=new int[end-start+1];
int j=0;
while(start<=end1&&i<=end){
if(s[start]<s[i])
temp[j++]=s[start++];
else
temp[j++]=s[i++];
}
while(start<=end1)
temp[j++]=s[start++];
while(i<=end)
temp[j++]=s[i++];
for(int n=0;n<temp.length;n++) {
//System.out.print(temp[n]+" ");
s[n+sta]=temp[n];
}
}
//快排
public void quickSort(int[] s,int start,int end){
if(start>end) return;
int mid=fimid(s,start,end);
quickSort(s,start,mid-1);
quickSort(s,mid+1,end);
}
private int fimid(int[] s, int start, int end) {
// TODO Auto-generated method stub
int key=s[start];
int i=start;
int j=end;
while(i<j){
while(i<j&&key<=s[j])j--;
if(i<j){
s[i]=s[j];
i++;
}
while(i<j&&key>s[i])i++;
if(i<j){
s[j]=s[i];
j--;
}
}
s[i]=key;
return i;
}