//堆排序
static void swap(int &a,int &b)
{
if (a!=b)
{
a=a^b;
b=a^b;
a=a^b;
}
}
void siftdown(int array[],int i, int length)
{
int j;
for (j = 2*i+1; j < length ;)
{
if (j+1<length && array[j]<array[j+1])
{
j++;
}
if (array[j]>array[i])
{
swap(array[j],array[i]);
}
i=j;
j=2*i+1;
}
}
void HeapSort(int array[],int length)
{
if (NULL == array || length <=0)
{
return ;
}
int i;
for ( i = (length>>1)-1; i >=0;--i )
{
siftdown(array,i,length);
}
for (i=length-1;i>0;--i)
{
swap(array[0],array[i]);
siftdown(array,0,i);
}
}
//归并排序 void merge(int array[],int low, int mid,int high) { int i,j,k; int *temp = new int[high-low+1]; assert(temp); i=low,j=mid+1,k=0; while (i<=mid&&j<=high) { if (array[i]<array[j]) { temp[k++]=array[i++]; } else temp[k++]=array[j++]; } while (i<=mid) { temp[k++]=array[i++]; } while (j<=high) { temp[k++]=array[j++]; } for (i=low,j=0;i<=high;++i) { array[i]=temp[j++]; } delete []temp; } void MergeSort(int array[],int low, int high) { int mid; if (low < high) { mid = (low+high)>>1; MergeSort(array,low,mid); MergeSort(array,mid+1,high); merge(array,low,mid,high); } }