选择类排序:1:简单选择排序O(n^2),空间O(1)
2:堆排序O(n乘以log以2为底,n的对数),空间复杂度O(1)
//选择排序
void SelectSort(int R[],int n)
{
int i,j,k;
int tmp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(R[j]<R[k])
k=j;
}
if(k!=i)
{
tmp=R[i];
R[i]=R[k];
R[k]=tmp;
}
}
}
//堆排序
void sift(int R[],int low,int high)
{
int i=low,j=2*i;
int tem=R[i];
while(j<=high)
{
if(j<high && R[j]<R[j+1])//孩子最大的给双亲
j++;
if(tmp<R[j])
{
R[i]=R[j];
i=j; //以孩子为双亲,继续向下探索
j=2*i;
}
else
break;
}
R[i]=tmp;
}
void HeapSort(int R[],int n)
{
int i;
int tmp;
for(i=n/2;i>=1;i--)//循环建立初始堆
sift(R,i,n);
for(i=n;i>=2;i--)
{
tmp=R[1];
R[1]=R[i];
R[i]=tmp;
sift(R,1,i-1);
}
}
选择类排序:选择排序,堆排序
最新推荐文章于 2022-12-05 17:45:32 发布