//冒泡算法
int Sort(int a[],int n)
{
int i,j;
for(i = 0 ; i < n; ++i)
{
for(j = 1 ; j < n - i ; ++j)
{
if(a[j - 1] > a[j])
{
swap(a[j-1],a[j]);
}
}
}
}
//直接插入排序
int Sort(int a[],int n)
{
int i,j;
for(i = 1 ; i < n ; i++)
{
for(j = 0 ; j < i;j++)
{
if(a[i-j] > a[i-j-1])
{
swap(a[i-j],a[i-j-1]);
}
}
}
}
//归并排序
int Sort4(int a[],int n)
{
int i,j,gap;
for(gap = n / 2;gap != 0;gap /= 2 )
{
for (i = gap; i < n; i++)
{
for (j = i - gap; j >= 0 && a[j] > a[j + gap]; j -= gap)
{
swap(a[j], a[j + gap]);
}
}
}
}
//高效快速排序
int f_avg(int *ay, unsigned long int l, unsigned long int r, long int*avg)
{
int i;
if(r<l)
return 0;
else
{
*avg=0;
int sum = 0 ;
for( i=l;i<=r;i++)
{
sum += ay[i];
}
*avg+=sum/(r-l+1);
return 1;
}
}
void Sort(int *ay, unsigned long int l, unsigned long int r )
{
unsigned long int i,j; long int mid;
if(r<=l)
return;
if((l+1)==r && ay[l] > ay[r])
{
swap(ay[l],ay[r]);
return;
}
if(!f_avg(ay,l,r,&mid))
return;
i=l;j=r;
while(i<j)
{
while(ay[i]<=mid && i<j)i++;
while(ay[j]>=mid && i<j)j--;
if(i<j)
swap(ay[i],ay[j]);
else
break;
}
if(l<j&&j<=r)
{
Sort(ay, l, j-1);
Sort(ay, j, r);
}
}
// 堆插入算法
void MinHeapFixup(int a[], int i)
{
int j, temp;
temp = a[i];
j = (i - 1) / 2; //父结点
while (j >= 0 && i != 0)
{
if (a[j] <= temp)
break;
a[i] = a[j]; //把较大的子结点往下移动,替换它的子结点
i = j;
j = (i - 1) / 2;
}
a[i] = temp;
}
或者
void MinHeapFixup(int a[], int i)
{
for (int j = (i - 1) / 2; (j >= 0 && i != 0)&& a[i] > a[j]; i = j, j = (i - 1) / 2)
Swap(a[i], a[j]);
}
//堆删除算法
// 从i节点开始调整,n为节点总数 从0开始计算 i节点的子节点为 2*i+1, 2*i+2
void MinHeapFixdown(int a[], int i, int n)
{
int j, temp;
temp = a[i];
j = 2 * i + 1;
while (j < n)
{
if (j + 1 < n && a[j + 1] < a[j]) //在左右孩子中找最小的
j++;
if (a[j] >= temp)
break;
a[i] = a[j]; //把较小的子结点往上移动,替换它的父结点
i = j;
j = 2 * i + 1;
}
a[i] = temp;
}
//在最小堆中删除数
void MinHeapDeleteNumber(int a[], int n)
{
Swap(a[0], a[n - 1]);
MinHeapFixdown(a, 0, n - 1);
}
//堆的创建
//建立最小堆
void MakeMinHeap(int a[], int n)
{
for (int i = n / 2 - 1; i >= 0; i--)
MinHeapFixdown(a, i, n);
}
//堆排序
void MinheapsortTodescendarray(int a[], int n)
{
for (int i = n - 1; i >= 1; i--)
{
Swap(a[i], a[0]);
MinHeapFixdown(a, 0, i);
}
}