{
min=j;
}
}
if(min!=i)
{
int t=value[min];
value[min]=value[i];
value[i]=t;
}
}
}
//堆排序
//先进行调整堆,建立堆是在调整堆的基础之上的
/**
* value:带排序的数列
* i:待调整的节点,i是从0开始计数
*/
public static void adjustHeap(int []value,int i,int size)
{
//由于数组的下标是从0开始的
int left=2*i+1;
int right=2*i+2;
int temp=i;
if(i
if(left
{
temp=left;
int t=value[left];
value[left]=value[i];
value[i]=t;
adjustHeap(value,left,size);
}
if(right
{
temp=right;
int t=value[right];
value[right]=value[i];
value[i]=t;
adjustHeap(value,left,size);
}
}
}
//建立一个堆
public static void buildHeap(int []value)
{
for(int i=value.length/2-1;i>=0;i--)
{
adjustHeap(value,i,value.length);
}
System.out.println(Arrays.toString(value));
}
//最后进行堆排序
public static void heapSort(int []value)
{
for(int i=value.length-1;i>=1;i--)
{
int t=value[i];
value[i]=value[0];
value[0]=t;
adjustHeap(value, 0, i);
}
}
//归并排序
public static void mergeArray(int []a,int first,int mid,int last,int[]temp)
{
int i,j,k;
i=first;
j=mid+1;
k=0;
while(i<=mid && j<=last)
{
if(a[i] {
temp[k++]=a[i++];
}else
{
temp[k++]=a[j++];
}
}
while(i<=mid)
{
temp[k++]=a[i++];
}
while(j<=last)
{
temp[k++]=a[j++];
}
for(int t=0;t
a[first+t]=temp[t];
}
}
//
public static void mergeSort(int []a,int first,int last,int []temp)
{
int mid;
if(first
mid=(first+last)/2;
mergeSort(a,first,mid,temp);
mergeSort(a,mid+1,last,temp);
mergeArray(a,first,mid,last,temp);
}
}
public static void Merge(int []a,int []temp)
{
mergeSort(a,0,a.length-1,temp);
}
}