首页 > 代码库 > 选择类排序:选择排序,堆排序

选择类排序:选择排序,堆排序

选择类排序: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);
	}
}

选择类排序:选择排序,堆排序