//堆排序
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);
}
}

2739

被折叠的 条评论
为什么被折叠?



