插入排序,选择排序,堆排序代码

void InsertSort(SeqList &seq)
{
	int n = GetSize(seq);
	for(int i = 1;i<n;++i)
	{
		if(seq.data[i] < seq.data[i-1])
		{
			ElemType tmp = seq.data[i];
			int j = i - 1;
			do
			{
				seq.data[j+1] = seq.data[j];
				--j;
			}while(j >= 0 && tmp < seq.data[j]);
			seq.data[j+1] = tmp;
		}
	}
}

void SelectSort(SeqList &seq)
{
	int n = GetSize(seq);
	for(int i = 0;i<n-1;++i)
	{
		int minpos = i;
		for(int j = i+1;j<n;++j)
		{
			if(seq.data[minpos] > seq.data[j])
			{
				minpos = j;
			}
		}
		if(i != minpos)
		{
			Swap(seq.data[minpos],seq.data[i]);
		}
	}
}
void FilterDown(SeqList &seq,int start,int end)
{
	int i = start,j = 2*i+1;
	ElemType tmp = seq.data[i];
	while(j <= end) //
	{
		if(j < end && seq.data[j] < seq.data[j+1]) ++j; // Max
		if(tmp >= seq.data[j]) break;
		seq.data[i] = seq.data[j];
		i = j;
		j = i*2+1;
	}
	seq.data[i] = tmp;
}
void HeapSort(SeqList &seq)
{
	int end = seq.cursize - 1;
	int pos = (end-1)/2;
	// makeheap
	while(pos >= 0)
	{
		FilterDown(seq,pos,end);
		--pos;
	}
	for(int i = seq.cursize-1; i>0;--i)
	{
		Swap(seq.data[0],seq.data[i]);
		FilterDown(seq,0,i-1);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40738945/article/details/86518332