快排,归并(日常复习)

不多说了,直接上代码吧

int quicksort(vector<int>& vec,int l,int r)
{
	int key=vec[r];
	int pre=l-1;
	int cur=l;
	while(cur<r)
	{
		if(vec[cur]<key)
		{
			pre++;
			swap(vec[pre],vec[cur]);
		}
		cur++;
	}
	swap(vec[pre+1],vec[r]);
	return pre+1;
}

void Quick(vector<int>& vec,int l,int r)
{
	if(l<r)
	{
		int p=quicksort(vec,l,r);
		Quick(vec,l,p-1);
		Quick(vec,p+1,r);
	}
}

归并

void Merge(vector<int>& vec, int l, int m, int r)
{
	int len = r - l + 1;
	vector<int> tmp(len);
	int left = l;
	int right = m + 1;
	int index = 0;
	while (left <= m && right <= r)
	{
		tmp[index++] = vec[left] <= vec[right] ? vec[left++] : vec[right++];
	}
	while (left <=m )
	{
		tmp[index++] = vec[left++];
	}
	while (right <= r)
	{
		tmp[index++] = vec[right++];
	}
	for (int i = 0; i < len; i++)
	{
		vec[l++] = tmp[i];
	}
}
void Mergesort(vector<int>& vec, int l, int r)
{
	if (l < r)
	{
		int m = (l + r) / 2;
		Mergesort(vec, l, m);
		Mergesort(vec, m + 1, r);
		Merge(vec, l, m, r);
	}
}
发布了22 篇原创文章 · 获赞 0 · 访问量 361

猜你喜欢

转载自blog.csdn.net/yanchenzhi/article/details/104995063