C++分治算法学习笔记之归并排序,快速排序

这篇笔记是对慕课上郭炜老师的c++课程自己的总结,方便日后复习

1.归并排序-------复杂度为O(nlog(n))

思想:
1)把前一半排序。
2)把后一半排序。
3)把两半归并到一个有序数组,然后再拷贝回原数组,排序完成。

#include 
using namespace std;
void Merge (int a[] ,int s,int m,int e,int tmp [])
{
//将数组a的局部a[s,m]和a[m+ 1,e]合并到tmp,并保证tmp有序,然后再拷贝回a[s,m]
//归并操作时间复杂度: 0 (e-m+1),即O (n)
	int pb=0;
	int p1 = s,p2 = m+1;
	while(p1<=m&&p2<=e)
	{
		if( a[p1] < a[p2])
			tmp [pb++] = a[p1++] ;
		else
			tmp [pb++] = a[p2++] ;
	}
	while( p1 <= m)
		tmp[pb++] = a[p1++] ;
	while( p2 <= e)
		tmp[pb++] = a[p2++] ;
	for(int i = 0;i < e-s+1; ++i)
		a[s+i] = tmp[i] ;
}
//以上是  Merge  函数的实现
void MergeSort(int a[] ,int s,int e,int tmp[])
{
	if(s<e) 
	{
		int m= S+ (e-s) /2;
		MergeSort(a,s ,m, tmp) ;
		MergeSort(a,m+1,e,tmp) ;
		Merge (a,s,m,e, tmp) ;
	}
}
//此处是  Mergesort  函数的实现 用递归的方法
int a[10] = {13,27,19,2,8,12,2,8,30,89} ;
int b[10];
//以下是主函数
int main ()
{
	int size = sizeof (a)/sizeof (int) ;//取数组共有多少个值
	MergeSort(a,0,size-1,b) ;//调用Mergesort
	for(int i = 0;i < size; ++i)
	cout << a[i] << ",";
	cout << endl ;
	return 0 ; .
}

以下转载一张归并排序图解:
原文https://blog.csdn.net/weixin_41582192/article/details/81239266
转载归并排序图解

2.快速排序

●数组排序任务可以如下完成:
1)设k=a[0],将k挪到适当位置,使得比k小的元素都
在k左边,比k大的元素都在k右边,和k相等的,不关心
在k左右出现均可(O (n)时间完成)
2)把k左边的部分快速排序
3)把k右边的部分快速排序

#include 
using namespace std;
void swap(int & a,int & b) //引用变量交换变量a ,b值
{
	int tmp = a;
	a =b;
	b = tmp;
}

void QuickSort(int a[] ,int s,int e)
{
	if( s>= e)
		return;
	int k=a[s];
	int i = s,j=e;
	while( i != j) 
	{
	while(j>i&&a[j]>=k)
			--j;
	swap(a[i] ,a[j]) ;
	while(i<j&&a[i]<=k)
			++i;
	swap(a[i] ,a[j]) ;
	} //处理完后,a[i]= k
QuickSort(a,s,i-1) ;
QuickSort(a,i+1,e) ;
}
//Quicksort函数递归实现
int a[] = {93,27,30,2,8,12,2,8,30,89};
//以下为主函数
int main ()
{
	int size = sizeof(a) /sizeof (int);
	QuickSort(a,0,size-1);//调用Quicksort函数
	for(int i = 0;i < size; ++i)
	cout<< a[i] <<",";
	cout<< endl ; 
	return 0;
}

以下为图解
C++分治算法学习笔记之归并排序,快速排序_第1张图片
C++分治算法学习笔记之归并排序,快速排序_第2张图片
C++分治算法学习笔记之归并排序,快速排序_第3张图片
C++分治算法学习笔记之归并排序,快速排序_第4张图片
C++分治算法学习笔记之归并排序,快速排序_第5张图片
C++分治算法学习笔记之归并排序,快速排序_第6张图片
C++分治算法学习笔记之归并排序,快速排序_第7张图片
C++分治算法学习笔记之归并排序,快速排序_第8张图片
C++分治算法学习笔记之归并排序,快速排序_第9张图片

你可能感兴趣的:(笔记,c++,算法,排序算法,数据结构)